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

2024-04-19 02:01:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

平均值:

import django.core
...

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

  File "a.py", line 1, in <module>
    import django.core
  ImportError: No module named core

那么,在导入python模块时如何区分它们呢?你知道吗


Tags: 模块文件djangoinpycoreimport文件夹
2条回答

您可以从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)。你知道吗

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

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

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

但是,请小心;必须对python导入内部进行负责任的破坏。你知道吗

相关问题 更多 >