gpt4 book ai didi

关于导入自定义包的 Python3 问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:45:36 24 4
gpt4 key购买 nike

我的项目层次结构(Python 3.5):

/home/pavarine/Projects/brp   (project root)
config.py
main.py
lib/
Class1.py

我正在尝试将我的项目(brp 文件夹)动态转换为 python 包,并从我想要的任何地方调用它的模块,如下所示:

从“main.py”执行:

sys.path.insert(0, "/home/pavarine/Projects/brp")
print('\n'.join(sys.path))

这给了我:

/home/pavarine/Projects/brp
/home/pavarine/Projects/brp
/usr/lib/python35.zip
/usr/lib/python3.5
/usr/lib/python3.5/plat-x86_64-linux-gnu
/usr/lib/python3.5/lib-dynload
/home/pavarine/.local/lib/python3.5/site-packages
/usr/local/lib/python3.5/dist-packages
/usr/lib/python3/dist-packages

我可以清楚地看到我的项目根路径现在位于 sys.path 中,但是当我尝试导入“config.py”时出现错误:

从“main.py”执行:

from brp import config

结果:

ImportError: No module named 'brp'

我做错了什么?

最佳答案

您需要将父目录插入python路径。

但是,请不要这样做。从脚本内部操纵 python 路径可能很危险,使用绝对路径使其不可移植。

为您的项目创建另一个名为 brp 的文件夹,并在其中创建一个简单的 setup.py。它应该是这样的

/home/pavarine/Projects/brp   (project root)
setup.py
brp/
__init__.py # can be empty
config.py
main.py
lib/
__init__.py # can be empty
Class1.py

开始时,setup.py 可以很简单

from setuptools import setup, find_packages

setup(
name='brp',
packages=find_packages(),
)

然后您可以使用 pip install . 从根文件夹安装您的包,并在您系统的任何地方使用它,而无需操作 sys.path

如果你愿意,你可以使用 pips 开发者模式:pip install -e .,这只会创建符号链接(symbolic link),这样项目目录中的更改会直接生效,而无需重新安装包。

关于关于导入自定义包的 Python3 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49962314/

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