我在 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.py
或 some_module_A.py
中,键入 import packages.package_to_share.module_to_share
失败。
这让我想到以下问题:
鉴于我的问题的具体情况,包要由根文件夹中的文件和其他包共享(访问),是否有更好的方法来组织我的文件夹?这种模块和文件的组织一般是否符合 Python 中的良好标准?
下面的内容对我来说看起来非常 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/