Python 导入包内文件-项目结构

Python 导入包内文件-项目结构,python,packages,python-import,Python,Packages,Python Import,在进行导入时,我对python项目中的包结构有一些疑问 这是一些惯例 python-irodsclient\u API=项目名称 我已经为每个文件定义了python包,在本例中如下所示: python-irodsclient\u API/config/ python-irodsclient\u API/connection/ 这些包很好地定义为包而不是目录,真的吗 我有一个文件python-irodsclient\u API/config/config.py,其中我定义了一些与服务器连接的配置

在进行导入时,我对python项目中的包结构有一些疑问

这是一些惯例

python-irodsclient\u API=项目名称

我已经为每个文件定义了python包,在本例中如下所示:

python-irodsclient\u API/config/

python-irodsclient\u API/connection/

这些包很好地定义为包而不是目录,真的吗

我有一个文件
python-irodsclient\u API/config/config.py
,其中我定义了一些与服务器连接的配置常数:

我有python-irodsclient\u API/connection/connection.py文件:

在上一张或上一张图像中(以红色突出显示)。。这是导入文件的正确方法吗

我觉得这样的感觉不是更好。 我知道“导入”应该是相关的,而不是绝对的(对于路径),这是必要的使用“.”代替“*” 在我的情况下,我不知道这是否可以应用于我在图形中所做的工作

我感谢你的帮助和指导
致以最诚挚的问候

中有一个很好的教程,介绍了如何引用结构化文件夹下的包


基本上,
从x导入y
,其中
y
是一个子模块名,允许您使用
y.z
而不是
x.y.z

我可以调用sys模块来附加python-irodsclient\u API路径

import sys
sys.path.append('C:\..\python-irodsclient_API')

当您操作connection.py并希望调用config时,它能够成功。

您在这里有两个选项:

1) 让你的项目成为一个包。由于您的
连接
配置
包似乎是相互依赖的,因此它们应该是同一个包中的模块。要实现这一点,请在
python-irodsclient\u API
文件夹中添加
\uuu init\uuuuuuuuuupy.py
文件。现在,您可以使用相对导入将
配置
导入到
连接
,因为它们是相同包的一部分:

from ..config import config
部分表示从包结构中的上一级导入(类似于
表示Unix中的父目录)

2) 如果出于某种原因不想将
python-irodsclient\u API
作为一个包,那么第二个选项是将该文件夹添加到PYTHONPATH。您可以根据Tony Yang的回答动态执行此操作,或者从bash命令行执行此操作,如下所示:

export PYTHONPATH=$PYTHONPATH:/path/to/python-irodsclient_API

虽然这可以回答问题,但请在此处包含答案的基本部分,并提供链接以供参考。