【问题标题】:Cannot import a python module in a script outside the module无法在模块外的脚本中导入 python 模块
【发布时间】:2023-03-14 13:00:01
【问题描述】:

我正在从事一个按以下方式构建的项目:

repo-name/
   .venv
   src/
      __init__.py
      module1.py
      module2.py
   scratches/
      script1.py
   poetry.lock
   pyproject.toml

在 script1.py 中我想使用 module1.py 和 module2.py 中定义的类,因此文件看起来像:

#repo-name/scratches/script1.py

import src.module1 as m1

我使用 Pycharm 作为 IDE,并且我已将 src 标记为源目录。如果我在 Pycharm 中运行 script1.py,我不会收到任何错误。但是,如果我导航到 repo-name/scratches/ 并运行 poetry shell 然后运行 ​​python script1.py 我会收到以下错误:

ModuleNotFoundError: No module named 'src'
   

由于存储库名称中的“-”,绝对导入无法从 repo-name 开始。

有什么解决方案可以在不改变存储库结构的情况下运行脚本吗?

【问题讨论】:

  • 你的问题解决了吗?

标签: python package repository importerror


【解决方案1】:

解决方案

你可以这样做:

import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
sys.path.append(os.path.dirname(__file__))

将此代码放在脚本顶部,在其他导入之前。

说明

使用sys.path.append(),您可以将任何文件夹/目录添加到sys.path 列表中。当您导入内容时,解释器会在此列表中查找模块和包。因此,您可以向其中添加自己的 src 路径并进行导入。

此外,我使用了一些 os 工具,如 os.path.dirnameos.path.join__file__ 变量结合使用,以自动添加 ./../ 目录(src 所在的位置)和 ./ 目录(其中脚本是)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 2020-07-02
    • 2022-09-27
    • 2013-08-01
    相关资源
    最近更新 更多