导入错误: 没有名为 ...Python 中的错误 - 设置 PYTHONPATH 仍然不起作用



我有一个类似于这里描述的问题 如何修复"导入错误:没有名为..."错误在 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.pypath/to放在PYTHONPATH的开头(sys.path

这会导致导入从(在您的情况下(src/ml开始,而不是预期的src

通过使用-m,您可以避免此路径的修改,并且它将正确地将src作为sys.path的开始。

当我在 PyCharm 中对此进行测试时,如果将 python/src 设置为源根目录,无论工作目录是什么,它都可以工作。但是当我从命令行运行它时,我无法弄清楚如何正确设置它。

您可以通过cding 到src目录中来执行此操作

不应将可执行脚本放入库结构中。

只有库模块才能进入包结构。可执行文件应保留在其外部。这对于安装和日常使用非常重要。一旦你安装了你的包(例如使用distutils(,如果你把可执行文件留在库中,使用它就会很复杂。您必须每次都向python库提供完整的安装路径(并且不要忘记-m!(或创建快捷方式或其他解决方法。

单独的可执行文件和库。可执行文件被安装到类似usr/local/bin的东西上,并且可以调用,没有路径、-m或其他问题,并且您的库已安装到 python 库中。

最新更新