【问题标题】:import files inside packages - Project Structure导入包内的文件 - 项目结构
【发布时间】:2015-05-11 00:34:03
【问题描述】:

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

这些是一些约定

python-irodsclient_API = Project Name

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

python-irodsclient_API/config/

python-irodsclient_API/connection/

这些包被很好地定义为包而不是目录?

我有一个文件 python-irodsclient_API/config/config.py,我在其中定义了一些关于与我的服务器连接的配置的常量:

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

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

我觉得这种方式的感觉并没有更好。 我知道“导入”应该是相对的而不是绝对的(对于路径),这是必要的使用“。”反而 ”*” 就我而言,我不知道这是否可以应用于我在图形中所做的事情。

感谢您的帮助和指导 最好的问候

【问题讨论】:

    标签: python packages python-import


    【解决方案1】:

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

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

    【讨论】:

    • 虽然这可能会回答问题,但it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
    【解决方案2】:

    你有两个选择:

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

    from ..config import config
    

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      当你操作connection.py,想调用config,就可以成功了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 2018-11-21
        • 1970-01-01
        • 2012-11-13
        • 2018-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多