文件层次结构和本地导入
File hierarchy and local imports
我正在尝试找出 python3 中的文件层次结构和本地导入。我 运行 遇到了以下文件结构的问题:
└── project
├── run.py
└── scripts
├── __init__.py
├── misc.py
├── script1.py
└── script2.py
我对“脚本”目录中的所有文件使用相对导入。
from misc import x, y, z
我在 run.py
中使用绝对导入。
from scripts.misc import a, b, c
from scripts.script1 import more_stuff
我的目标是让 python 文件独立且功能齐全。但是,当我尝试执行 run.py
时,遇到错误。
from misc import x, y, z
ModuleNotFoundError: No module named 'misc'
我希望相对路径是相对于原始文件的,而不是采用执行文件的路径。我可以通过修改导入或文件结构来解决这个问题吗?
看来我不明白 __init__.py
是如何工作的。我想重新使用通用包名称(如“脚本”)。我曾假设 __init__.py
文件将在执行文件的下游立即读取:如果执行 run.py
,则应仅考虑同一级别的脚本目录。我发现一个遥远的(不相关的?)“脚本”目录获得优先权。这是否可以通过更谨慎的绝对路径来解决?示例如下。
└── dir
└── project1
| ├── run.py
| └── scripts
| ├── __init__.py
| └── settings.py
└── subdir
└── project2
├── run.py
└── scripts
├── __init__.py
└── settings.py
从“项目 1”执行 run.py
将尝试从项目 2 导入“脚本”目录。
cannot import name 'variable' from 'scripts.settings' (/Users/.../dir/subdir/project2/scripts/settings.py)
从“项目 1”执行 run.py
时,从 project2/scripts 中删除 __init__.py
不再产生错误。
- 您是说:
I use relative imports for all files in the "scripts" directory.
from misc import x, y, z
但这不是相对的。对于亲戚,你需要
from .misc import x, y, z
- 要了解为什么不相关的脚本优先,请查看您的
sys.path
并验证它是否确实在您的脚本包之前。我可以假设这是 ide 路径操作的一些剩余部分。
我正在尝试找出 python3 中的文件层次结构和本地导入。我 运行 遇到了以下文件结构的问题:
└── project
├── run.py
└── scripts
├── __init__.py
├── misc.py
├── script1.py
└── script2.py
我对“脚本”目录中的所有文件使用相对导入。
from misc import x, y, z
我在 run.py
中使用绝对导入。
from scripts.misc import a, b, c
from scripts.script1 import more_stuff
我的目标是让 python 文件独立且功能齐全。但是,当我尝试执行 run.py
时,遇到错误。
from misc import x, y, z
ModuleNotFoundError: No module named 'misc'
我希望相对路径是相对于原始文件的,而不是采用执行文件的路径。我可以通过修改导入或文件结构来解决这个问题吗?
看来我不明白 __init__.py
是如何工作的。我想重新使用通用包名称(如“脚本”)。我曾假设 __init__.py
文件将在执行文件的下游立即读取:如果执行 run.py
,则应仅考虑同一级别的脚本目录。我发现一个遥远的(不相关的?)“脚本”目录获得优先权。这是否可以通过更谨慎的绝对路径来解决?示例如下。
└── dir
└── project1
| ├── run.py
| └── scripts
| ├── __init__.py
| └── settings.py
└── subdir
└── project2
├── run.py
└── scripts
├── __init__.py
└── settings.py
从“项目 1”执行 run.py
将尝试从项目 2 导入“脚本”目录。
cannot import name 'variable' from 'scripts.settings' (/Users/.../dir/subdir/project2/scripts/settings.py)
从“项目 1”执行 run.py
时,从 project2/scripts 中删除 __init__.py
不再产生错误。
- 您是说:
I use relative imports for all files in the "scripts" directory.
from misc import x, y, z
但这不是相对的。对于亲戚,你需要
from .misc import x, y, z
- 要了解为什么不相关的脚本优先,请查看您的
sys.path
并验证它是否确实在您的脚本包之前。我可以假设这是 ide 路径操作的一些剩余部分。