当我pyhton path/to/app.py
运行脚本时,目录path/to
放在python将查找要导入的模块的位置列表的前面。
有没有办法迫使python不这样做?这是运行脚本而不将其目录放在导入路径上(或将其添加为最低优先级而不是最高优先级)?
原因是在这个目录中,我有另一个名为threading
的模块,我的脚本导入logging
它本身发出一个import threading
,然后解析为我的自定义threading
模块而不是内置模块:
$ tree
.
└── app
├── main.py
└── threading.py
$ cat app/main.py
import logging
python app/main.py
结果
Traceback (most recent call last):
File "app/main.py", line 2, in <module>
import logging
File "/usr/lib/python2.7/logging/__init__.py", line 201, in <module>
_lock = threading.RLock()
AttributeError: 'module' object has no attribute 'RLock'
您似乎有两个选择:
- 编辑
sys.path
以优先选择 python 包。很容易做到。这只是一list
串。执行一些列表操作以在末尾添加第一项。 - 将 threading.py 从根移动到另一个包中。喜欢
processing.threading
.
如果我在你的位置,我会选择第二个选项,因为它有助于长期保持代码干净。