说有一个文件夹,一个 '/ home /用户/温度/ a40bd22344'。 这个名字是完全随机的,在每次迭代变化。 我需要使用一个固定的名字,说“工程”,能够在Python导入此文件夹中。 我知道我可以添加此文件夹的sys.path使进口查找,但有什么办法来取代“a40bd22344”与“工程”?
也许在初始化的.py一些聪明的黑客?
添加:
它需要全球的 - 也就是说,其他脚本通过标准装载“项目”:
import project
要正常工作,加载a40bd22344代替。
说有一个文件夹,一个 '/ home /用户/温度/ a40bd22344'。 这个名字是完全随机的,在每次迭代变化。 我需要使用一个固定的名字,说“工程”,能够在Python导入此文件夹中。 我知道我可以添加此文件夹的sys.path使进口查找,但有什么办法来取代“a40bd22344”与“工程”?
也许在初始化的.py一些聪明的黑客?
添加:
它需要全球的 - 也就是说,其他脚本通过标准装载“项目”:
import project
要正常工作,加载a40bd22344代替。
你先用进口导入:
>>> __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)]
这里有一个办法做到这一点,而不触及sys.path中,使用imp
在Python模块:
import imp
f, filename, desc = imp.find_module('a40bd22344', ['/home/user/temp/'])
project = imp.load_module('a40bd22344', f, filename, desc)
project.some_func()
下面是对一些好的文档的链接imp
模块:
当然, project = __import__('a40bd22344')
之后sys.path
正确设置将只是工作。
假设你想要做一个功能完全占据路径作为参数和设置的全球进口project
正常(以及神奇地使import project
工作之后在其他模块)。 小菜一碟:
def weirdimport(fullpath):
global project
import os
import sys
sys.path.append(os.path.dirname(fullpath))
try:
project = __import__(os.path.basename(fullpath))
sys.modules['project'] = project
finally:
del sys.path[-1]
这也使sys.path的,因为它发现了它。