python - 安装包依赖项的最佳实践在 pypi 中不可用

标签 python pip python-packaging requirements.txt

我的 python 包依赖于一个不在 pypi 中的私有(private)包。可以假设私有(private)包的结构是this .

目标 :以任何方式将第 3 方私有(private)包存储在我自己包中的某个位置,以便在我运行 pip install -r requirements.txt 时(甚至更好的 pip install <my_pkg_name> ),安装了第 3 方依赖项。这必须在 Windows 和 Linux 中工作。

一个潜在的解决方法 : 不要安装第 3 方模块。相反,把它放在你的主包目录中,import它的模块。

/my_pkg
    /non_pypi_pkg
    /my_pkg
        module.py

在哪里 module.py能够import non_pypi_pkg不安装 non_pypi_pkg .

问题 :实现目标的推荐做法是什么?我们能比我的解决方法做得更好吗?

最佳答案

当我与 合作时第三方包 , 我经常使用下面的方法之一使用 setuptools .
1.安装直接在setup.py中指明URL路径.
具有以下结构:

/my_pkg
├── /my_pkg
│   ├── __init__.py
│   └── module.py
├── setup.py
安装程序.py
setup(
    name="my_pkg",
    version="0.0.0",
    packages=find_packages(),
    install_requires=['flask', 
        'non_pypi_pkg @ https://github.com/<user>/non_pypi_pkg/archive/main.zip#egg=non_pypi_pkg-0.0.1',
        ]
)

When the repository is private I use a personal access token (by github), in the same example could be pkg @ https://<token>@github.com/<user>/pkg/...


  • 然后pip install -e my_pkg

  • 2. 从具有多个包的 monorepo 工作以强制执行 python 分离层。
    具有以下结构:
    /
    ├── my_pkg
    │   ├── my_pkg
    │   │   ├── __init__.py
    │   │   └── module.py
    │   └── setup.py
    ├── non_pypi_pkg
    │   ├── non_pypi_pkg
    │   │   ├── __init__.py
    │   │   └── module_b.py
    │   └── setup.py
    
    /non_pypi_pkg/setup.py
    setup(
        name="non_pypi_pkg",
        version="0.0.1",
        packages=find_packages(),
        install_requires=[]
    )
    
    /my_pkg/setup.py
    setup(
        name="my_pkg",
        version="0.0.0",
        packages=find_packages(),
        install_requires=['flask', 'non_pypi_pkg']
    )
    
  • 这里需要按依赖顺序安装。例如:
     pip install -e non_pypi_pkg; pip install -e my_pkg;
    

  • I prefer to use a script as a Makefile for these tasks but is possible too with a bash or power-shell script like as next:


    #!/bin/bash
    libraries=(non_pypi_pkg my_pkg)
    
    for dirname in $(ls); do
        if [ -d "$dirname" ] && [ -e "$dirname/setup.py" ]; then
            pip install -e $dirname
        fi
    done
    

    关于python - 安装包依赖项的最佳实践在 pypi 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49515001/

    相关文章:

    python - 如何跟踪列表中的所有字符串是否都存在特定字符串?

    python - 如何在Keras中获取预测错误数据的索引?

    python - 是否可以让 pip 打印它正在使用的配置?

    python - 为 virtualenv 纠正 shebang

    python - 如何编辑 wheel 包 (.whl)?

    python - 如何更新python中的变量列表?

    python - Python 的 super() 如何处理多重继承?

    python - `python setup.py sdist` 与 cython 扩展 : . pyx ' doesn' t 匹配任何文件

    python - 如何查找特定模块的包名称?

    python - 如何在运行时将模块中的函数添加到类中,同时保留包层次结构?