更改工作目录以从不同文件导入是不好的做法吗?

问题描述 投票:0回答:1

相对导入在交互式 Python 会话中不起作用,但我可以更改目录

os.chdir('..')
,然后
import module_in_parent
,然后返回
os.chdir('original_directory')
。或者对并行目录执行相同的操作。

这会被视为不好的做法吗?如果是,为什么? (我还没有真正见过它的使用,但我自己多次遇到这个问题。)

我在实验中使用了一些脚本和实用函数,希望保持文件夹结构不变,但也可以在新实验中重用一些脚本。

编辑:这是一个文件夹结构的示例:

project/
├── experiment
│   ├── main.py
│   └── utils
│       └── utils_functions.py
└── new_experiment
    └── main2_.py

我想从 main2.py 导入

utils_functions
。我不想改变
experiment
中的任何内容。

@Random Davis:在上面的示例中,我使用 importlib 时收到错误

ImportError: attempted relative import beyond top-level package

我不是在开发具有单个入口点的程序,而是在进行一些数据分析,其中我使用多个短脚本来修改和可视化数据。

python python-import relative-import
1个回答
0
投票

将目录添加到搜索路径很容易 - 实际上,我认为这比更改目录更容易。

虽然以这种方式更改目录在正在运行的程序中会非常非常糟糕,但在交互式会话中它只是很麻烦 - 所以,好吧,你做了一次,它做了你需要的,你做了两次 -好吧……但一遍又一遍地重复只是不行。

Python 查找要导入的文件的目录是一个简单的字符串列表,按照您想要的优先级顺序添加您想要的目录是很简单的:

>>> from pathlib import Path; import os, sys
>>> sys.path.insert(0, str(Path(os.getcwd()).parent())

将在Python路径中插入父目录以进行导入。无需更改工作目录。 (之后也可以将其从列表中删除)。另外,

pathlib.Path
杂耍只是为了能够使用
.parent
- 人们可以做
sys.path.insert(0, os.getcwd() + "/..")
- (而
insert(0, ...)
只是常规列表的插入方法,将新路径放在位置0)

© www.soinside.com 2019 - 2024. All rights reserved.