【发布时间】:2015-02-01 01:35:35
【问题描述】:
以下代码:
def _IMPORT_(path)
path = abspath(path)
namespace = path[len(getcwd())+1:].replace('/', '_').strip('\\/;,. ')
print(path)
print(namespace)
loader = importlib.machinery.SourceFileLoader(namespace, path+'.py')
handle = loader.load_module(namespace)
print(handle)
importlib.reload(handle)
return handle
生产:
/home/torxed/git/test/unitest/unix
unitest_unix
<module 'unitest_unix' from '/home/torxed/git/test/unitest/unix.py'>
Traceback (most recent call last):
File "network.py", line 17, in <module>
handle = sock()
File "network.py", line 9, in __init__
sock = _IMPORT_('./unix')
File "/home/torxed/git/test/unitest/helpers.py", line 13, in _IMPORT_
imp.reload(handle)
File "/usr/lib/python3.4/imp.py", line 315, in reload
return importlib.reload(module)
File "/usr/lib/python3.4/importlib/__init__.py", line 149, in reload
methods.exec(module)
File "<frozen importlib._bootstrap>", line 1134, in exec
AttributeError: 'NoneType' object has no attribute 'name'
这在引入此类操作的 Python 3.3.5 中完美运行(在此之前有一些类似的导入机制)。但是在 Python 3.4.2 上,这显然不起作用。
自 3.3.5 以来发生了什么变化?找不到它的任何痕迹,或者更改位于版本中间的某个位置。去年有一个针对这种确切行为的补丁,其中没有传递环境变量,但似乎在这里工作。
【问题讨论】:
-
奇怪的是,在我的 Python 3.4.2 (Mac OS X) 中它也不起作用,但我得到:
AttributeError: 'module' object has no attribute 'machinery'。
标签: python reload python-import python-3.4