我有一个类似于这里描述的问题 如何修复"导入错误:没有名为..."错误在 Python 中?但我无法通过设置 PYTHONPATH 的建议来修复它。
我的目录如下所示:
- project
- python
- src
- ml
- __init__.py
- classifier_dnn.py
- util.py
- vectorizer
- fv_davison.py
- __init__.py
我正在项目文件夹路径上运行classifier_dnn.py:
~project&PYTHONPATH=/home/project/
~project$python3 /home/project/python/src/ml/classifier_dnn.py /home/project/data/labeled_data_all.csv /home/project/output
但是classifier_dn导入ml.util时会生成错误:
Traceback (most recent call last):
File "/home/project/chase/python/src/ml/classifier_dnn.py", line 5, in <module>
from ml import util
ImportError: No module named 'ml'
我也尝试设置PYTHONPATH=/home/project/python或PYTHONPATH=/home/project/src,但发生了同样的错误。
当我在 PyCharm 中对此进行测试时,如果将python/src设置为源根目录,无论工作目录是什么,它都可以工作。但是当我从命令行运行它时,我无法弄清楚如何正确设置它。
请提供任何帮助
谢谢
我对此有一篇文章,但我会内联复制相关文本。
您有两个问题:
- 您需要导出
PYTHONPATH
(export PYTHONPATH=/full/path/to/src
( - 您应该使用
python -m module.path
而不是python path/to/file.py
运行
核心问题是python path/to/file.py
把path/to
放在PYTHONPATH
的开头(sys.path
这会导致导入从(在您的情况下(src/ml
开始,而不是预期的src
。
通过使用-m
,您可以避免此路径的修改,并且它将正确地将src
作为sys.path
的开始。
当我在 PyCharm 中对此进行测试时,如果将 python/src 设置为源根目录,无论工作目录是什么,它都可以工作。但是当我从命令行运行它时,我无法弄清楚如何正确设置它。
您可以通过cd
ing 到src
目录中来执行此操作
不应将可执行脚本放入库结构中。
只有库模块才能进入包结构。可执行文件应保留在其外部。这对于安装和日常使用非常重要。一旦你安装了你的包(例如使用distutils(,如果你把可执行文件留在库中,使用它就会很复杂。您必须每次都向python库提供完整的安装路径(并且不要忘记-m
!(或创建快捷方式或其他解决方法。
单独的可执行文件和库。可执行文件被安装到类似usr/local/bin
的东西上,并且可以调用,没有路径、-m
或其他问题,并且您的库已安装到 python 库中。