【问题标题】:Import custom modules from in script launched from Django从 Django 启动的脚本中导入自定义模块
【发布时间】:2019-07-30 14:45:14
【问题描述】:

我正在尝试处理上传到 Django 服务器的文件。当我收到它时,我启动了一个处理文件的 python 脚本(我需要这样做而不是使用类,所以请不要告诉我从类中执行)。

我的 Django 结构如下:

项目

  • 网络服务器:
    • 设置 ...
    • url.py ...
  • S2T:这是我的应用程序,我有我的看法
    • views.py
    • apps.py ...
  • src:这里有我的自定义模块,我将重点关注 2:
    • 管道
      • master.py
      • misc.py

从视图中我启动了一个 python 脚本:

sb_info = subprocess.run(['python', 'src/pipeline/master.py', '/tmp'], stdout=subprocess.PIPE, universal_newlines=True)

这很好用,但是当启动脚本时出现以下错误:

文件“src/pipeline/master.py”,第 10 行,在 from src.classes.misc import path_to_dest ModuleNotFoundError: No module named 'src'

问题是该文件确实存在。我使用os.listdir() 进行了检查,master.py 确实看到了 src 模块,这是我得到的输出:

[temp.txt, db.sqlite3, pycache, S2T, .idea, manage.py, src, wdir.txt, .git, web_server]

我尝试了很多我在stackoverflow中看到的东西,例如:

  • 在 INSTALLED_APPS 中声明包
  • 使用导入 .src
  • 在 S2T 中移动 src

我想再次声明,从views.py中检测到src模块,我可以导入它的功能,当我启动一个python脚本时问题就来了,然后它抱怨找不到模块,但是os.listdir()确实看到了,所以我对正在发生的事情感到困惑。

非常感谢您的帮助!

【问题讨论】:

  • 为什么要通过子进程运行 Python 脚本,而不是仅仅导入并调用它?
  • 正如我所说的,我可以避免在这里这样做,但是在我没有创建的其他进程中,有一些启动 python 脚本的 bash 脚本,所以我需要完成这项工作

标签: python django module python-import


【解决方案1】:

问题似乎出在您为导入提供的路径上。您的 src 模块在您提供的树中的脚本之上两层,因此在每个目录中包含显式 __init__.py 文件以从父模块执行绝对导入,如下所示:

Python: Import file in grandparent directory

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多