【问题标题】:Python import & packages: __init__.py file not fixing ModuleNotFoundError?Python 导入和包:__init__.py 文件未修复 ModuleNotFoundError?
【发布时间】:2020-04-17 08:18:35
【问题描述】:

所以我阅读了Packages 文档,并在每个包和父包中包含了 __init__.py 文件。我的目录是这样的

sparro
    __init__.py
    api
        __init__.py
        sparrolib.py
    schema
        __init__.py
        tsbuild.py
    scripts
        __init__.py
        scrape_descriptors.py
    utils
        __init__.py
        analytics.py
        engine.py
        utility.py

所以我尝试将我的实用程序模块导入到 scrape_descriptors.py 中

from sparro.utils import utility, engine

它失败并给了我一个 ModuleNotFoundError。我尝试使用其他模块,我遇到了同样的问题。我有什么误解,我该如何纠正?

错误:

Traceback (most recent call last):
  File "/Users/dominictarro/Documents/Sparro/sparro/scripts/scrape_descriptors.py", line 2, in <module>
from sparro.utils import utility, engine
ModuleNotFoundError: No module name 'sparro'
[shell_cmd: python -u "/Users/dominictarro/Documents/Sparro/sparro/scripts/scrape_descriptors.py"]
[dir: /Users/dominictarro/Documents/Sparro/sparro/scripts]
[path: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin]

【问题讨论】:

  • 请贴出整个错误信息和回溯,scrape_descriptors.py如何执行?
  • 已添加。通过 sublime 构建工具

标签: python import python-import devops


【解决方案1】:

您需要将包的父目录添加到您的 PYTHONPATH。

在 sublime 终端中运行以下命令:

export PYTHONPATH=$PYTHONPATH:/Users/dominictarro/Documents/Sparro/

为了让您永久了解如何为您的系统设置环境变量。如果您运行的是 linux 或 macOS,那么您可以将命令添加到您的 .bashrc 文件中(可能在此处 /Users/dominictarro/.bashrc)

您还可以查看如何通过 sublime 设置 PYTHONPATH。


或者,您需要在您的工作目录为 /Users/dominictarro/Documents/Sparro/ 时调用代码

您可以通过在此处创建一个文件(按照约定称为 main.py)来导入和调用您的库中的某些内容。

例如

from sparro.scripts.scrape_descriptors import run

if __name__ == '__main__':
    run()

显然需要一个名为 run 的函数。

【讨论】:

  • 在 sublime 中运行它所以现在我猜它是 .py 的当前工作目录
  • 我一直在阅读“不要乱用 PYTHONPATH”。我还是个新手,不想搞砸这样的事情。是否有一个简短的 Python 脚本可以用来将父路径 /Users/dominictarro/Documents/Sparro/ 永久添加到 sys.path?
  • 我不知道。我在答案中添加了另一种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2018-10-09
  • 1970-01-01
  • 2019-02-27
相关资源
最近更新 更多