【问题标题】:How to have multi-directory or multi-package python project?如何拥有多目录或多包的python项目?
【发布时间】:2018-02-23 05:47:10
【问题描述】:

我有这样的项目结构:

package1/__init__.py
package1/file1.py
package1/file2.py

package2/__init__.py
package2/file1.py
package2/file2.py

__init__.py
script1.py
script2.py

不幸的是,我发现我只能从根目录运行代码,例如从script1.py。如果我从pakage2/file2.py 运行,则文件之间的所有链接都将丢失,即从package2 导入的package1 将找不到。

Python中正确的目录结构是什么,哪些限制了所有目录的包结构?

【问题讨论】:

    标签: python packages


    【解决方案1】:

    您需要将 package1package2 都放在一个包中,在这种情况下,它们可以相互导入:

    root_package/
        __init__.py
        package1/
        package2/
    

    或者将包添加到您的PYTHONPATH,在这种情况下,您系统上的任何 python 脚本都可以从中导入:

    export PYTHONPATH="$PYTHONPATH:/path/to/package1:/path/to/package2"
    

    更新:如果您直接运行脚本,则无法将其作为包的一部分导入。您应该做的是根据需要在包中定义类和函数,然后从另一个脚本中导入它们:

    root_package/
        __init__.py
        my_script.py
        package1/
        package2/
    

    script.py:

    from package1 import ...
    from package2 import ...
    

    【讨论】:

    • 对不起,我的根目录里当然也有__init__.py文件,我已经解决了问题
    • 反正也没用
    • “另一个脚本”是指“根目录中的脚本,但不在任何子目录中”?
    • 是的,或者在其他地方包含root_package 的脚本是PYTHONPATH
    • 我不想。发明目录是为了将文件分组到逻辑组中。我想保持这项发明完好无损。我不想像在 PCM 操作系统中那样在一个目录中放置几十个不同用途的脚本的长长的简单列表
    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2012-01-26
    • 2014-09-09
    • 1970-01-01
    相关资源
    最近更新 更多