2015-05-09 67 views
2

我有关系的Python项目的一些疑虑封装结构,当我做进口导入文件 - 项目结构

这些都是一些约定

python-irodsclient_API = Project Name

我已经为每个文件定义python包,在这种情况下如下:

python-irodsclient_API/config/

python-irodsclient_API/connection/

这些包以及定义为一个包,而不是作为目录真的吗?

enter image description here

我有我已经定义了一些常量有关配置的与我的服务器连接文件python-irodsclient_API/config/config.py

enter image description here

和我有python-irodsclient_API/connection/connection.py文件:

enter image description here

在上一张或上一张图片(用红色突出显示)..这是导入文件的正确方法吗?

我觉得这种方式的感觉并不好。 我知道“进口”应该是亲属,而不是绝对(路径),这是必要的使用“。”而不是“*” 在我的情况下,我不知道这是否可以适用于我在图形中做的事情。

我感谢您的帮助和方向 问候

回答

1

有关于这一个很好的教程在Python module docs,这也解释了如何引用包下的结构化文件夹。

基本上from x import y,其中y是一个子模块的名称,允许您使用y.z,而不是x.y.z

+0

虽然这可能回答这个问题,[但最好(http://meta.stackoverflow.com/q/8259)在这里包括答案的基本部分,并提供参考链接。 –

0

我可以调用sys模块来追加python-irodsclient_API路径。

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

当您运行connection.py并想要调用config时,它能够成功。

1

您有2个选择:

1)使您的项目成为一个包。由于您的connectionconfig包似乎是相互依赖的,因此它们应该是同一包中的模块。要做到这一点,请在python-irodsclient_API文件夹中添加__init__.py文件。现在,你可以使用相对进口导入configconnection,因为它们是同一个包的一部分:

from ..config import config 

..部分是指从一个层次进口上述封装结构中(类似于..如何意味着父目录Unix)

2)如果你不想让python-irodsclient_API出于某种原因的软件包,那么第二个选择是将该文件夹添加到PYTHONPATH中。你可以这样做每杨佑宁的答案动态,或从bash命令行执行此操作如下:

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