【问题标题】:ModuleNotFoundError when running Python script from Supervisor从 Supervisor 运行 Python 脚本时出现 ModuleNotFoundError
【发布时间】:2019-03-22 17:52:32
【问题描述】:

我使用 supervisor 从我的包中启动 python 脚本。 当我尝试从主管启动进程时,它会产生错误:Exited too quickly (process log may have details)。但是从终端运行此脚本时一切正常:

cd /var/www/html/MyProject
source venv/bin/activate
python src/main.py

主管进程配置:

[program:MyProject]
directory=/var/www/html/MyProject/
command=/var/www/html/MyProject/venv/bin/python src/main.py
autostart=true
autorestart=true
stdout_logfile = /var/www/html/MyProject/logs/myproject_testing-out.txt
stdout_logfile_maxbytes = 3MB
stdout_logfile_backups = 3
stderr_logfile = /var/www/html/MyProject/logs/myproject_testing-err.txt
stderr_logfile_maxbytes = 3MB
stderr_logfile_backups = 3

日志文件中的错误 (/var/www/html/MyProject/logs/myproject_testing-err.txt):

Traceback (most recent call last):
  File "src/main.py", line 8, in <module>
    import src.config as config
ModuleNotFoundError: No module named 'src'

我做错了什么?

【问题讨论】:

  • 没有名为 src 的模块。也许您应该将项目根目录添加到 python 导入路径?这可以通过在主管配置中设置环境变量来完成。 environment=PYTHONPATH=/var/www/html/MyProject/
  • @HåkenLid 已将其添加到 MyProject 主管配置中,但未受影响,仍会产生该错误。

标签: python-3.x python-import supervisord


【解决方案1】:

如果main.py 和config.py 或config 包都在src 中,则不需要像这样导入配置,您可以像这样导入它:

import config

如果您想像您一样从src 导入它,可能您在该文件夹中缺少__init__.py 文件以使其成为一个包,尽管将源文件夹作为一个包没有多大意义。

【讨论】:

  • 我为 alembic 制作了 src 一个包,因为我需要将我的模型元数据文件导入到 alembic env.py:target_metadata = src.base.Base.metadata。 Alembic 文件位于 src 目录之外,这就是我这样做的原因。
猜你喜欢
  • 2018-11-17
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多