在Python中覆盖名称空间

发布于 2021-01-29 17:59:05

假设有一个文件夹“ / home / user / temp/a40bd22344”。名称是完全随机的,并且在每次迭代中都会更改。我需要能够使用固定名称(例如“
project”)在Python中导入此文件夹。我知道我可以将此文件夹添加到sys.path中以启用导入查找,但是有没有一种方法可以将“a40bd22344”替换为“项目”?

也许 init .py有一些聪明的技巧?

添加:

它必须是全局的-也就是说,其他脚本通过该标准加载“项目”:

import project

必须正常工作,而是加载a40bd22344。

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    你先用导入 进口

    >>> __import__('temp/a40bd22344')
    <module 'temp/a40bd22344' from 'temp/a40bd22344/__init__.py'>
    

    然后,确保该模块被Python识别为project

    >>> import sys
    >>> sys.modules['project'] = sys.modules.pop('temp/a40bd22344')
    

    之后,当前Python会话中的任何导入项目都将获得原始模块

    >>> import project
    >>> project
    <module 'temp/a40bd22344' from 'temp/a40bd22344/__init__.py'>
    

    这也适用于子模块:如果在同一位置有foobar.py,则将获得

    >>> import project.foobar
    >>> project.foobar
    <module 'project.foobar' from 'temp/a40bd22344/foobar.py'>
    

    附录。 这是我正在运行的:

    >>> print sys.version
    2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
    [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看