我的项目有以下目录:
photo_analyzer/
│
├── main.py # Main script to run the photo analyzer
├── gui/ # Directory for GUI-related files
│ ├── __init__.py # Package initialization
│ ├── app.py # Tkinter application class and main GUI logic
│ ├── widgets.py # Custom Tkinter widgets (if needed)
│ ├── styles.py # Styling configurations for the GUI
│ └── resources/ # Directory for GUI resources (e.g., icons, images)
│ ├── icon.png # Application icon
│ └── ...
│
├── photo_analysis/ # Directory for photo analysis-related files
│ ├── __init__.py # Package initialization
│ ├── photo_utils.py # Utility functions for photo manipulation
│ ├── light_profiles.py # Functions to analyze light profiles in photos
│ └── ...
我正在尝试将
photo_utils
和 light_profiles
从 photo_analysis
模块导入到 gui/app.py
。每当我尝试运行 app.py
时,我都会收到以下错误消息:
Traceback (most recent call last):
File "c:\Users\Josh\Documents\PhotoAnalyzer\gui\app.py", line 6, in <module>
from photo_analysis import photo_utils
ModuleNotFoundError: No module named 'photo_analysis'
我在两个目录中都有空的
__init__.py
文件,所以我认为这不是问题。我尝试使用 photo_analysis
将 SET PYTHONPATH="C:\Users\Josh\Documents\PhotoAnalyzer\photo_analysis"
模块添加到 Python 路径,并且我也尝试使用 sys.path
技术。两者都以与之前相同的错误消息结束。
photo_utils.py
从“gui”模块导入widgets.py
。我可能遇到循环依赖吗?我确实尝试了 text 中解释的解决方法,将 widgets
导入到 photo_utils
中使用它的每个方法中,虽然这允许 photo_utils
中的测试主代码正常运行,但 app.py
仍然给出同样的错误消息,没有名为“photo_analysis”的模块。
我错过了什么?
导航到
photo_analyzer/
目录并运行
python3 -m gui.app
这是一个棘手的问题。通常,Python 会从其同级文件或同级文件夹的子级导入。 在这里,如果您想从来自同一父级的文件导入,则必须使用
sys.path.append('.')
其次还取决于终端当前的工作目录。如果您当前的工作目录是“photo_analyzer”,那么添加这些行就可以了
import sys
sys.path.append('.')
import photo_analysis.photo_utils as pa
否则,如果您当前的工作目录是“photo_analyzer/gui”,那么您必须添加这些行
import sys
sys.path.append('./../photo_analysis')
import photo_utils as pa
我认为你需要使用相对导入。
在
gui/app.py
中,您可以使用相对导入从 photo_analysis
包中导入模块。
# gui/app.py
# Use relative import to import photo_utils from photo_analysis package
from ..photo_analysis import photo_utils
# Use relative import to import light_profiles from photo_analysis package
from ..photo_analysis import light_profiles
import 语句中的 .. 表示在目录层次结构中上升一级,然后您可以访问 photo_analysis 包内的模块。
此外,请确保您正在运行
main.py
或根目录 (photo_analyzer/
) 中导入 gui.app
或其他模块的另一个脚本。如果直接运行 app.py
,可能找不到 photo_analysis
包。
这个指南很好地解释了相对导入的工作原理。