为什么 Python 找不到我正在导入的文件?

Why can't Python find the files I'm importing?

最近我开始研究一个新的 Python 项目,我想我可以适当地构建它,而不是像往常一样将所有代码都放在一个目录中。使用 this tutorial 我为我的项目创建了一个这样的文件夹结构:

myappholder/
myappholder/README.md
myappholder/LICENSE.txt
myappholder/.gitignore
myappholder/myapp/
myappholder/myapp/__init__.py (empty file)
myappholder/myapp/main.py
myappholder/myapp/config.py
myappholder/myapp/subdir
myappholder/myapp/subdir/__init__.py (empty file)
myappholder/myapp/subdir/helper.py

main.py 的内容:

from myapp.subdir.helper import sayHello

subdir/helper.py 的内容:

from myapp.config import SOME_CONST

def sayHello():
    print(SOME_CONST)

config.py 的内容:

SOME_CONST = 'Hello world'

当 运行 python main.py(来自 myappholder/myapp)时,我收到此错误(为简洁起见删除了跟踪):ModuleNotFoundError: No module named 'myapp。当 运行 python -m main (来自 myappholder/myapp) 我得到同样的错误。

我知道这可能是我做错的一件非常简单的事情,但是几个小时的谷歌搜索并没有解决问题。我不确定问题是出在我如何设置项目还是我如何 运行 但我们将不胜感激。

详情:

你应该在你的 根文件夹 (myappholder) 到 运行 一切。

你的目录结构是这样的:(当你在myappholder里面时)

以更好的方式编写目录结构,如下所示:

.
├── myapp
│   ├── config.py
│   ├── __init__.py
│   ├── main.py
│   └── subdir
│       ├── helper.py
│       └── __init__.py
└── README.md

长而完整的解决方案

了解 python 导入的工作原理。你好像不是很了解。

阅读这篇详细而精彩的文章:https://realpython.com/python-import/

您需要学习的概念:


用于测试您的应用程序的快速解决方案

打开终端并运行 python(从项目的根目录)

现在在此交互式 shell 中,导入 myapp 并调用您需要的函数 运行。


公开一个 cli

如果您需要公开 CLI,您可以打包您的应用程序,使用 poetry or setuptools 非常好。

您可以定义一个命令行界面。

例如,如果您使用的是诗歌,您可以将其放入 pyproject.toml

[tool.poetry.scripts]
samplepy = 'samplepy:cli'

现在,运行ning,来自终端的samplepy将执行samplepy包的cli函数。

所以你 运行 来自 myappholder/myappmyappfolder 中的 运行 或删除第一层层次结构(from myapp.X.X 中的 myapp)。

myappholder 中创建另一个 main_app.py 文件,在该文件中从 myapp/main.py 调用 运行 项目中的 function/module。

然后 运行 main_app.py 脚本,它将起作用