使用安装工具分发python包



我有一个python项目,它的项目结构具有同级导入(从目录结构中的同一级别导入包(。我能够使用设置工具来完成这项工作。

我有一个setup.py,在我的包的顶层有以下内容:

from setuptools import setup, find_packages
setup(name='myproject', version='1.0',
packages=find_packages(), python_requires='>=3.4')

然后我做了一个pip3 install -e .,它允许我通过在导入语句前面加上myproject.来导入同级模块。这很好,但当我将此代码添加到版本控制并在其他地方克隆项目时,我会遇到同样的兄弟导入问题。有没有办法避免每次有人克隆这个repo时都运行这个命令通过pip安装我的顶级软件包?我曾尝试在virtualenv中完成这一切,并在克隆repo的位置将其激活,还将.egg-info目录置于版本控制中,但没有成功。我如何分发这个包,以便如果这个repo被克隆,其他人可以运行代码?

我对python还比较陌生,所以如果我遗漏了一些明显的东西,我会提前道歉。如果有更好的建议来分发这个代码,我也愿意学习。提前感谢!

编辑:(跟进评论(我的项目结构(简化(类似于(下面(,其中a和b中的模块需要相互导入。如上所述,我能够做到这一点,但我的用例将要求我部署此代码并按计划运行脚本(假设为.py(。如果我有一个管道部署此代码,它应该能够运行,而不必手动运行"pip-install"。虽然我使用安装工具来解决兄弟导入的问题,但我意识到这可能不是正确的方法,我愿意接受建议。提前感谢!

.
├── project
│   ├── a
│   │   ├── a.py
│   │   └── __init__.py
│   ├── b
│   │   ├── b.py
│   │   └── __init__.py
│   └── __init__.py

当您使用pip进行安装时,它会找到所有包,并将它们相对于父包进行安装,这样您就可以通过在项目前加前缀进行导入。因此,无论你想在哪里使用,你都必须运行pip。

然而,如果你想避免在不经过pip的情况下运行,尽管可能不建议这样做,但你可以假设/app/home/packages是你当前的文件夹:

import sys
sys.path.append("/app/home/packages")

此命令将搜索所有模块,然后添加到您的路径中,这样您就不需要运行子模块(同级(导入。但是,当您准备分发包时,您可能需要删除它,使其成为一个干净的分发包。

最新更新