如何解决如何将另一个 python 项目作为子模型添加到我的项目中?
我将 python 项目 B 作为模型复制到我的项目 A 中。但是B的include路径是基于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
制作模块
然后试试这个:
from B.test32 import 'function Name'
然后调用它。
,正如 @Wàlid Bachri 所说,您应该开始放置 __init__.py
文件,但它比 .
您必须将这些 __init__.py
文件放在每个目录中。所以它看起来像这样。
.
└── mypackage A
├── __init__.py # here under A
├── subpackage_1
| ├── __init__.py
│ ├── test11.py
│ └── test12.py
├── subpackage_2
| ├── __init__.py # under package 2
│ ├── test21.py
│ └── test22.py
└── subpackage B
├── __init__.py # under package B
├── test31.py
└── test32.py
在每个__init__.py
文件中,需要导入同一目录下的所有文件。因此,例如在 subpackage B
中,您需要这样做。
#/subpackage B/__init__.py
from . import test31
from . import test32
在 mypackage A
中,没有文件,只有目录,您也可以做同样的事情(from . import subpackage_2
等)。
如果我认为 mypackage A
是“main”包(从你的 diargam 中可以看出),那么它不是一个子模块,运行您需要执行以下操作的任何文件。
首先cd
到mypackage A
的父目录,然后
# Suppose you want to execute /subpackage_1/test11
python -m mypackage_A.subpackage_1.test11 # WARNING mypackage A should have no whitespace
您可能会收到关于您的 RuntimeWarning
被修改的 sys.modules
,但我可以向您保证,根据经验,您可以放心地忽略它。这是用于 pip 的 Python 模块通常的完成方式,以确保轻松推送到生产环境。
EDIT :还要注意,在所有文件中,对于相对导入,您应该切换到包导入,因此您必须使用点语法。
from . import test32 # this will import .test32
如果您改为从 import test32
到 test31
,interpeter 将尝试搜索名为 test32
的全局包,而不是在同一目录中查找。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。