安装pypi

时间:2018-03-27 14:02:03

标签: python pip python-packaging requirements.txt

我的python包取决于不在pypi中的私有包。您可以假设私有包的结构是this

目标:将第三方私有软件包存储在我自己的软件包中的某个位置,以便当我运行pip install -r requirements.txt(或更好pip install <my_pkg_name>)时,第3个已安装派对依赖项。这必须适用于Windows和Linux。

潜在的解决方法:不要安装第三方模块。而是将其放在主包目录中,并将其import放在其模块中。

/my_pkg
    /non_pypi_pkg
    /my_pkg
        module.py

module.py无需安装import non_pypi_pkg就可以non_pypi_pkg

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

1 个答案:

答案 0 :(得分:0)

使用第三方软件包时,我经常使用以下一种方法使用setuptools

1。直接安装以指示setup.py中的URL路径。

具有以下结构:

/my_pkg
├── /my_pkg
│   ├── __init__.py
│   └── module.py
├── setup.py

setup.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',
        ]
)

当存储库为私有存储库时,我使用个人访问令牌by github),在同一示例中,可以为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;
    

我更喜欢使用脚本作为Makefile来完成这些任务,但也可以使用bashpower-shell脚本,如下所示:

#!/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
相关问题