4

我在 Python 程序上有以下结构:

my_program/
    main.py
    packages/
        __init.py__
        package_to_share/
           __init__.py
            main_to_share.py
            module_to_share.py
        package_A/
           __init__.py
            main_A.py
            some_module_A.py
        package_B/
           __init__.py
            main_B.py
            some_module_B.py

该包提供文件夹package_to_share中的每个包都使用的功能以及根文件夹中使用的功能。packagesmain.py

我还希望能够cd进入每个包并能够运行main_X.py.

到目前为止,我想出了如何main.py以下位置访问功能:

import packages.package_A.some_module_A
import packages.package_to_share.module_to_share

但我在package_to_share从常规包中访问功能时遇到问题(例如package_A

例如,在main_A.py或中时some_module_A.py,键入import packages.package_to_share.module_to_share失败。

这导致我提出以下问题:

  1. 鉴于我的问题的具体情况,包由根文件夹中的文件和其他包共享(访问),有没有更好的方法来组织我的文件夹?这种模块和文件的组织通常是否符合 Python 中的良好标准?

  2. 以下内容对我来说看起来非常 hacky,但这是我想出的最好的办法,以确保我的常规模块可以看到这些"shared"模块:

    p_this_file   = os.path.dirname(os.path.realpath(__file__))
    new_sys_path.append(os.path.join(p_cwd, '..')
    new_sys_path.extend(sys.path)
    sys.path      = new_sys_path
    

    它也不会阻止我的常规包相互导入。

4

1 回答 1

1

您可以在以下范围内使用相对导入,而不是操纵导入路径(我不推荐)module_A

from .. import shared

这就是我有时会做的事情,尽管我通常会安装我的包,所以我可以在需要使用它们的地方完全引用它们:

from my_module import shared
于 2013-07-16T16:18:21.323 回答