繁体   English   中英

使用安装工具分发python软件包

[英]Distributing python package using setup tools

我有一个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.来导入同级模块myproject. 效果很好,但是当我将此代码添加到版本控制中并在其他位置克隆项目时,同级导入也遇到了相同的问题。 有没有一种方法可以避免每次有人克隆此存储库时运行此命令通过pip安装我的顶级软件包? 我尝试在virtualenv中完成所有操作,并在克隆存储库的位置将其激活,并将.egg-info目录置于版本控制中,但无济于事。 我如何分发此软件包,以便如果克隆此仓库,其他人可以运行该代码?

我是python的新手,所以如果我遗漏了一些明显的东西,我会提前道歉。 如果有更好的建议来分发此代码,我也愿意学习。 提前致谢!

编辑:(遵循评论)我的项目结构(简化)类似于(如下),其中a和b中的模块将需要互相导入。 如上所述,我能够做到这一点,但我的用例将需要我部署此代码并按计划运行脚本(假设a.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")

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM