如何在 Python 包中正确设置内部导入?

How properly set up internal imports in Python package?

提问人:Даниил Галахов 提问时间:10/30/2023 更新时间:10/30/2023 访问量:30

问:

我正在开发一个 Python 3 包(比如“Project1”),我想在另一个 Python 项目(比如“Project2”)中使用它。Project1 的结构简要如下:

/global_project_folder
|-different_garbage...
|-setup.py
|-/src
  |-/project1
    |-__init.py__
    |-mainmodule.py
    |-auxmodule1.py
    |-auxmodule2.py
    |-etc...

setup.py 包含有关项目的信息,如本手册中所述。在此文件中,项目称为“project1”

mainmodule.py 包含如下代码:

import auxmodule1
from auxmodule2 import AuxMethod21,AuxMethod22

def MainMethod():
    return auxmodule1.AuxMethod11()*(AuxMethod21()+AuxMethod22())

我通过命令安装了 Project1 包进行开发:pipdeptree -l 在可用包列表中报告 project1。python3 -m pip install -e .

现在,在 Project2 中,我想编写如下代码:

from project1.mainmodule import MainMethod

但是当我尝试测试 Project2 时,它崩溃并出现错误“ModuleNotFoundError:没有名为'auxmodule1'的模块"

如果我像这样更改 Project1 mainmodule.py:

import project1.auxmodule1
from project1.auxmodule2 import AuxMethod21,AuxMethod22

一切开始工作。

但是我不想像这样修改 Project1,因为在这种情况下,它的代码无法在它之外工作,并且此选项是可行的。

我该如何解决这种情况?

我想以某种方式保持 Project1 的结构和代码不变 - 添加到项目的每个内部导入中,提到我们正在从这个项目本身导入模块看起来非常不优雅。有没有办法四处走动?

python-3.x python-import python-module python 打包

评论

0赞 Brian61354270 10/30/2023
这回答了你的问题吗?相对进口量为十亿次
2赞 Brian61354270 10/30/2023
每个模块都有一个且只有一个合格的封装位置。该模块可以是名为的顶级模块,也可以是包子模块。不能两者兼而有之。从哪里导入模块是完全无关紧要的。auxmodule1project1.auxmodule1
0赞 Даниил Галахов 10/30/2023
BKC公司然后我需要解释一下。、 等中的代码有它自己的价值。也就是说,可以独立运行,无需修改。但我也需要将它组合成一些东西(也许不是一个包?),什么应该作为外部项目的统一。我该怎么做?auxmodule1auxmodule2auxmodule1project1
1赞 Brian61354270 10/30/2023
是否/外部可用,还是仅作为“全球项目”的一部分存在?如果它在外部可用或可以单独打包,那么您可以将其声明为当前项目的依赖项。否则,您可以将 下面的所有内容添加为内部的附加顶级包/模块。project1auxmodule1project1setup.py
0赞 Brian61354270 10/30/2023
顺便说一句,已经过时了。您可能需要考虑切换到 setuptools 的当前界面,或迁移到不同的现代构建系统,setup.pypyproject.toml

答: 暂无答案