如何使用 python setuptools 将多个单个模块打包为子包

罗汉·索拉特

我的目录结构如下所示。

pkg-folder
├── LICENSE
├── pkg-name
│   ├── __init__.py
│   ├── module1
│   │   ├── module1.py
│   │   ├── __init__.py
│   │   └── resourceFile.json
│   └── module2
│       ├── __init__.py
│       └── module2.py
├── README.md
├── setup.py
├── MANIFEST.ini
└── setup.cfg

构建和安装包后,我必须按如下方式导入。

from pkg-name.module1.module1 import func1

当我知道 module1.py 将是子包中的单个文件时,如何直接导入如下?

from pkg-name.module1 import func1

__init__.py's的是空白。

埃里克牧羊人

您已经部分回答了自己的问题:

__init__.py的是空白的。

导入包时,解释器会检查包__init__.py文件中的名称绑定。 __init__.py文件只为同一目录中的子模块提供名称绑定例如,如果您有一个像这样的包结构

pkg_folder
└── pkg_name
    └── __init__.py

__init__.py包含一些定义,例如x = 2,然后pkg_folder作为当前工作目录或安装到您的 Python 环境的包,您可以x使用导入

from pkg_name import x

但是,如果xsubmodule中定义,情况会有所不同。考虑以下包结构:

pkg_folder
└── pkg_name
    ├── __init__.py
    └── module1.py

在这里,import pkg_name再次告诉解释器检查pkg_name/__init__.py名称绑定。如果定义x = 2module1.py而不是__init__.py,那么它不是pkg_name' 范围的一部分;相反,它属于pkg_name.module1,因此以下内容将起作用:

from pkg_name.module1 import x

但是,您可以通过使用包相对导入pkg_name为其定义名称绑定来显式添加它在这种情况下,可能会阅读:__init__.py__init__.py

from .module1 import x

其中,由于x现在定义在 中__init__.py,因此我们也可以在下面引用它pkg_name

from pkg_name import x

相同的逻辑适用于子包中的模块。因此,对于您正在寻找的行为,您需要__init__.py使用来自子包中其他模块的包相对导入来填充子包的文件。

from pkg_name.module1.module1 import func1

from pkg_name.module1 import func1

您的pkg_name/module1/__init__.py文件可能类似于以下内容:

from .module1 import func1

如果你有理由,你甚至可以扩展它以传播func1到父包。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使python setuptools查找顶级模块

如何使用setuptools或distutils分发脚本(而不是Python包)?

在Python 3.6中使用setuptools打包后出现ModuleNotFoundError

使用conda构建纯Python模块是否需要setuptools?

使用setuptools的Python软件包名称的格式

如何在Windows上为Python 2.6设置Setuptools?

如何使用setuptools将Python标签添加到bdist_wheel命令?

如何使用 setuptools 为 linux 创建 rpm 包

如何将静态文件包含到setuptools-Python软件包

使用setuptools将f2py生成的* .so文件链接到python包中

如何使用Python Setuptools指定脚本的执行权限

Setuptools 如何打包一些模块和文件

如何打包一个包含带有setuptools的gsettings模式的python应用程序?

Python setuptools / pip将数据文件打包到您的包中

使用setuptools打包并用pip安装后,Python代码看不到数据文件

Python Setuptools和PBR-如何使用git标签作为版本创建软件包发行版?

Python setuptools:如何指定第三方包的包别名?

具有setuptools模块的Python包没有属性

如何将Python模块与Extras打包为默认模块?

如何使用setuptools *安装*额外的软件包数据?

如何使用setuptools和setup.py从软件包中排除单个文件

如何在 CentOS 8 上安装 python-setuptools?

如何在Ubuntu 15.04上升级python setuptools> 12.2

降级Python Setuptools

使用python setuptools奇怪的〜150ms启动惩罚

Python setuptools - 没有以 pip install 命名的模块

Python 3:ImportError“没有名为Setuptools的模块”

Python和setuptools-'未命名模块...'

Python setuptools安装未安装软件包