我有一个非常简单的场景,如下所示:
example/
common.py
folder1/
script.py
Run Code Online (Sandbox Code Playgroud)
其中,script.py文件应导入common.py模块。
如果我cd进入folder1/并运行脚本(即通过python3 script.py在命令行上调用),导入会因通常的错误而中断ModuleNotFoundError: No module named 'common'。
我知道我可以通过__init__.py在每个子目录中添加文件来将整个父文件夹变成一个包,但是这个解决方案仍然阻止我直接从folder1/.
我怎样才能解决这个问题?
Wav*_*les 11
如果将两个目录都转换为 python 包,并且顶层目录位于 PYTHONPATH 中,则可以像这样运行 script.py:
python3 -m example.folder1.script
Run Code Online (Sandbox Code Playgroud)
如果您需要将父目录添加到搜索路径,您可以随时执行以下操作:
import os
import sys
DIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
sys.path.insert(0, DIR)
Run Code Online (Sandbox Code Playgroud)
os.path.realpath(__file__)获取文件的真实路径,并os.path.dirname获取该文件的目录名。执行两次即可获取example此处的目录。现在,由于它已添加到搜索路径中,因此您可以导入common.
但是,您确实应该考虑拥有一个专用的scripts或bin目录,而不是尝试从子目录运行脚本。考虑编写一个库,并导入该库而不是单个文件。