python - 组织为彼此和主程序提供功能的包

标签 python

我在 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 提供 packages 文件夹中的每个包使用的功能以及根文件夹中的 main.py 使用的功能。

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

到目前为止,我已经弄清楚了如何main.py 访问功能:

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

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

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

这让我想到以下问题:

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

  2. 下面的内容对我来说看起来非常 hacky,但这是我想出的最好的办法,以确保我的常规模块看到 “共享” 模块:

    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
    

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

最佳答案

您可以在 module_A 中使用相对导入,而不是操纵导入路径(我不推荐这样做):

from .. import shared

这就是我有时会做的,尽管我通常会安装我的软件包,这样我就可以在需要使用它们的地方完整地引用它们:

from my_module import shared

关于python - 组织为彼此和主程序提供功能的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17681633/

相关文章:

python - 如何使用协同过滤通过用户行为来预测用户?

python - Django 上具有相同模型的不同数据库

python - 尝试打印鼠标位置时输出错误

python - 有没有一种在保留章节元数据的同时下载视频的方法?

python - 给定两个列表,没有得到创建元组列表的正确输出

python - 在推理过程中从自定义 Tensorflow/Keras 层中提取中间变量 (TF 2.0)

python - 在传递可选参数时,在 python 中使用带有 os.tmp 文件的 subprocess.popen

python - python中numpy数组的随机大小分块

Python tweepy 查找荷兰的所有推文

python - 如何使用 epytext 为 PyCharm 中的自动完成提示记录 kwargs?