对于我当前的 python 项目,我目前在每个脚本的开头添加了这行代码:
import os
import sys
current = os.path.abspath(os.path.dirname(__file__))
(__,folder) = os.path.split(current)
while folder != "my_root_folder_name":
current = os.path.abspath(os.path.join(current, os.path.pardir))
(__, folder) = os.path.split(current)
sys.path.insert(0, current)
此处my_root_folder_name 是项目根文件夹的名称。在每个脚本中都有这个允许通过编写(无论导入脚本在哪里)从任何其他脚本导入它们中的任何一个:
import subfolder1.subfolder2.thescript
subfolder1 位于根文件夹 my_root_folder_name 中(最终路径为 /my_root_folder_name/subfolder1/subfolder2/thescript.py)。 p>
这是一个好习惯吗?你看到这个技巧有什么缺点了吗?我有什么更好的选择?
编辑:假设我的项目组织如下:
- 在主文件夹中,我有子文件夹 src、data、models、logs、配置...
- 在 src 中,我有一个主脚本“my_project.py”和子文件夹 data、models、features .
我使用这个技巧的原因是确保我可以从另一个子文件夹导入子文件夹的脚本。如果您不注意,这可能会导致循环导入,但是导入的 python '..' 语法也是如此。它还使导入更加清晰,因为每次导入都是通过将整个绝对路径写入脚本来完成的。
编辑 2: 这段代码不会导入所有其他脚本!!。它只是用项目的主文件夹替换脚本的第一个(索引 0)sys.path 值,这是文件所在的实际文件夹。
请您参考如下方法:
通常不会,出于某些原因,这不是好的做法。
- 您应该只导入每个文件绝对需要的包。导入不必要的包可能会导致性能问题,并可能导致代码困惑。
- 您在每个文件中为您的代码添加了一个循环,没有真正必要的原因。这不是好的做法,取决于您有多少依赖项会减慢您的速度。
- 您需要将文件放置在您的根文件夹中,并使用操作系统路径访问它,如果可以避免的话,通常性能不佳。
