好吧,我相信这是一个非常愚蠢的问题,应该已经回答过很多次了.但我找不到任何好的解决方案,这对我来说是有效的.
我有一个包裹,就叫它my_pack
吧.其中包含以下文件:
-
__init__.py
:
import A
-
A.py
:
import B
def A():
B.B()
if __name__=='__main__':
A()
-
B.py
:
def B():
print('B Called')
我想:
- 使用包
my_pack
作为独立应用程序,例如Callpython3 A.py
- 从位于不同位置的其他Python脚本导入它.
- Don't使用PIP:应用程序将部署在嵌入式系统上,默认情况下不安装PIP.最好是,我不想仅仅因为这一点而不得不包括PIP.
Current approaches:个
- 在任何地方都使用绝对路径.这显然真的很难看,我不想这样做.
- 创建本地(PIP)包.据我所知,要做到这一点,唯一简单的方法是使用pip.这对我的情况来说并不理想.
- 使用相对导入并编辑每个
__init__.py
文件中的python路径.这很管用,但也很难看. - 将包添加到python路径:理论上这应该是可行的,但我在包中的相对导入方面遇到了不少麻烦.这让我想,这也不是一个好的解决方案.问题是:
- 在包内,我宁愿不使用相对导入.只是因为我需要将所有普通导入转换为相对导入.
- 目前,我收到一个
ImportError: attempted relative import with no known parent package
错误.我相信,这是可以解决的,但我不确定解决这个问题有多容易或多好.
目前,我更喜欢的解决方案是将其添加到python路径并使用相对导入.然而,我并不认为,我目前的做法是好的.我认为,应该有一个更好、更简单的解决方案.
我是不是错过了其他可能性?或者这只是一个问题,在这个问题上,Python没有很好的解决方案?
我使用的是python3.9.5