区分本地模块和已安装的模块

时间:2015-10-23 14:00:11

标签: python django

我在我的机器上安装了django python模块,并像这样使用它

a.py:

import django.core
...

然后,我在文件django.py的同一文件夹中创建了一个新文件a.py,然后重新运行a.py,它会导致导入错误,因为它刚刚导入了我的本地{{1} }

django.py

那么,在导入python模块时如何区分它们?

2 个答案:

答案 0 :(得分:0)

您可以使用imp模块直接从本地路径导入脚本:

mymodule = imp.load_source('mymodule', 'django.py')

然后,您可以使用mymodule,就像您正常导入它一样。

但请谨慎使用;必须以负责任的方式颠覆python导入内部。

答案 1 :(得分:0)

您可以暂时从PYTHONPATH删除当前目录:

$ python -c'import numpy.core' # works
$ touch numpy.py               # add conflicting module
$ python -c'import numpy.core' # it fails now
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 2218, in _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named 'numpy.core'; 'numpy' is not a package
$ python -c'import sys; sys.path.remove(""); import numpy.core' # works again

毋庸置疑,如果有的话,你应该谨慎使用这些黑客 - 避免手动操纵sys.path。重命名本地模块,以避免冲突(至少在例如:your_package/numpy.py内将其移到包中。)