我在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_to_share
中的功能时遇到问题(例如package_A
)
例如,在main_A.py
或some_module_A.py
中,键入import packages.package_to_share.module_to_share
失败。
这导致我提出以下问题:
鉴于我的问题的具体细节,要由根文件夹和其他软件包中的文件共享(访问)软件包,是否有更好的方法来组织我的文件夹?这种模块和文件组织是否符合Python中的良好标准?
以下看起来非常讨厌我,但这是我想出的最好的事情,以确保我的常规模块能够看到"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
它也不会阻止我的常规包相互导入。
答案 0 :(得分:1)
您可以在module_A
中使用相对导入,而不是操纵导入路径(我不建议这样做):
from .. import shared
这是我有时会做的,虽然我一般都安装了我的软件包,所以我可以在需要使用它们的地方完全引用它们:
from my_module import shared