gpt4 book ai didi

python - 无法从另一个目录执行 Python 导入

转载 作者:行者123 更新时间:2023-12-05 01:50:23 24 4
gpt4 key购买 nike

我无法从另一个目录中的 Python 文件导入。目录结构:

some_root/
- __init__.py
- dir_0/
- __init__.py
- dir_1/
- __init__.py
- file_1.py
- dir_2/
- __init__.py
- file_2.py

file_1.py 有一些导出的成员:

# file_1.py
def foo():
pass

file_2.py 尝试从 file_1.py 导入成员:

# file_2.py
from dir_0.dir_1.file_1 import foo

但无论是绝对导入还是相对导入似乎都行不通。如何正确地进行 Python 的导入?如果我可以避免使用 sys.path.insert 就好了,但如果没有办法解决这个问题,那么我想事情就是这样。

最佳答案

不要乱用搜索路径

你没有乱用 sys.path 是对的。这是不推荐的,并且总是一个丑陋的解决方法。对此有更好的解决方案。

重组您的文件夹布局

参见 official Python docs about packaging .

区分项目文件夹包文件夹。我们假设您的 some_root 文件夹是包文件夹,它也是包的名称(在 import 语句中使用)。并且建议将包文件夹放入名为src的文件夹中。在它上面是项目文件夹some_project。此项目文件夹布局也称为“Src-Layout”。

在你的情况下它应该是这样的。

some_project
└── src
└── some_root
├── dir_0
│   ├── dir_1
│   │   ├── file_1.py
│   │   └── __init__.py
│   ├── dir_2
│   │   ├── file_2.py
│   │   └── __init__.py
│   └── __init__.py
└── __init__.py

让你的包可安装

使用该内容创建一个 some_project/setup.cfg。保留第 5 行和第 6 行的换行符和缩进。它们必须是这样的,但我不知道为什么。

[metadata]
name = some_project

[options]
package_dir=
=src
packages = find:
zip_safe = False
python_requires = >= 3
[options.packages.find]
where = src
exclude =
tests*
.gitignore

使用该内容创建 some_project/setup.py:

from setuptools import setup
setup()

“安装”包

这不是通常的安装。请看Developement Mode了解这真正意味着什么。包没有复制到/usr/lib/python/site-packages;仅创建链接。

导航到项目文件夹 some_project 并运行

python3 -m pip install --editable .

不要忘记结尾处的.。根据您的操作系统和环境,您可能必须将 python3 替换为 py -3python 或其他内容。

导入

你的file_2.py

import some_root
import some_root.dir_0
import some_root.dir_0.dir_1
from some_root.dir_0.dir_1 import file_1

file_1.foo()

但正如其他人在评论中所说。改进文件和文件夹的结构并降低其复杂性。

关于python - 无法从另一个目录执行 Python 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73166298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com