我将python项目B作为模型复制到项目A中。但是B的包含路径是基于B的。那么我如何从A调用B的函数呢
.
└── mypackage A
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage B
├── test31.py
└── test32.py
test31.py可能包括test32.py
import test32
但从A的角度来看,我应该通过
import B.test32
事实上,B比这个例子更复杂。我如何重构它
只需将一个名为
__init__.py
的空python文件添加到您的B项目中,即可使python将此项目视为普通的python模块首先在B中使用
__init__.py
生成模块 然后试试这个:然后叫它
正如@Wàlid Bachri所说的,您应该开始放置
__init__.py
文件,但这比。 您必须将这些__init__.py
文件放在每个目录中。所以看起来像这样在每个
__init__.py
文件中,需要导入同一目录中的所有文件。例如,在subpackage B
中,您需要这样做在
mypackage A
中,没有文件,只有目录,您也可以做同样的事情(from . import subpackage_2
等等)如果我假设
mypackage A
是“主”包(如您的diargam所示),那么它不是子模块,要运行任何文件,您将需要执行以下操作首先
cd
到mypackage A
的父目录,然后你可能会收到一封关于你的
RuntimeWarning
被修改的sys.modules
的邮件,但根据经验,我可以向你保证,你可以放心地忽略它。这就是pip的python模块通常是如何完成的,以确保推送到生产环境是容易的编辑:还要注意的是,在所有文件中,都应该切换到包导入进行相对导入,因此必须使用点语法
如果您改为从
test31
到import test32
,interpeter将尝试搜索名为test32
的全局包,而不是在同一目录中查找相关问题 更多 >
编程相关推荐