如何使用 twistd 导入自定义模块

How to import custom module with twistd

我有一个 python 文件,我想 运行 使用 twistd。在文件中我有:

from parser import Parser

我还有一个 parser.py 文件,里面有 Parser class。

当我调用脚本时一切正常:

python myscript.py 

但后来我用它来称呼它:

twistd -y myscript.py

它给我这个错误:

from parser import Parser
exceptions.ImportError: cannot import name Parser

我错过了什么?

作为模块导入的源文件需要在 Python 导入路径上被发现。 python 将包含脚本路径的目录添加到导入路径中。由于 parser.pymyscript.py 在同一目录中,这使得 parser 可导入。 twistd(我认为从 2016 年的某个版本开始)确实 而不是 这样做(添加路径被认为是一个安全问题,类似于 .PATH 环境变量中)。

你有几个选择。

最佳选择:为您的项目创建一个 setup.py。创建一个虚拟环境。使用 pip install -e ....

将您的项目安装到其中

一般选项:将包含源文件的目录添加到 PYTHONPATH 环境变量。