如何将另一个python项目作为子模型添加到我的项目中?

2024-09-28 21:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我将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比这个例子更复杂。我如何重构它


Tags: 项目函数py模型import路径角度mypackage
3条回答

只需将一个名为__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是“”包(如您的diargam所示),那么它不是子模块,要运行任何文件,您将需要执行以下操作

首先cdmypackage 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模块通常是如何完成的,以确保推送到生产环境是容易的

编辑:还要注意的是,在所有文件中,都应该切换到包导入进行相对导入,因此必须使用点语法

from . import test32 # this will import .test32

如果您改为从test31import test32,interpeter将尝试搜索名为test32的全局包,而不是在同一目录中查找

相关问题 更多 >