MLg*_*guy 5 python pip requirements.txt python-packaging
我的 python 包依赖于不在 pypi 中的私有包。你可以假设私有包的结构是这样的。
目标:以任何方式将 3rd 方私有包存储在我自己的包中的某个位置,以便在我运行时pip install -r requirements.txt(甚至更好pip install <my_pkg_name>)安装 3rd 方依赖项。这必须适用于 Windows 和 Linux。
一个潜在的解决方法:不要安装第 3 方模块。相反,将其按原样放置在主包目录import及其模块中。
/my_pkg
    /non_pypi_pkg
    /my_pkg
        module.py
Run Code Online (Sandbox Code Playgroud)
哪里module.py可以import non_pypi_pkg不用安装non_pypi_pkg。
问题:实现目标的推荐做法是什么?我们可以做得比我的解决方法更好吗?
当我使用第三方包时,我经常使用以下方法之一setuptools:
setup.py。具有以下结构:
\n/my_pkg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 /my_pkg\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.py\nRun Code Online (Sandbox Code Playgroud)\n安装程序.py
\nsetup(\n    name="my_pkg",\n    version="0.0.0",\n    packages=find_packages(),\n    install_requires=[\'flask\', \n        \'non_pypi_pkg @ https://github.com/<user>/non_pypi_pkg/archive/main.zip#egg=non_pypi_pkg-0.0.1\',\n        ]\n)\nRun Code Online (Sandbox Code Playgroud)\n\n\n当存储库是私有的时,我使用个人访问令牌(由 github 提供),在同一个示例中可以是
\npkg @ https://<token>@github.com/<user>/pkg/...
pip install -e my_pkg具有以下结构:
\n/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_pkg\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_pkg\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module.py\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 non_pypi_pkg\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 non_pypi_pkg\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module_b.py\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\nRun Code Online (Sandbox Code Playgroud)\n/non_pypi_pkg/setup.py
\nsetup(\n    name="non_pypi_pkg",\n    version="0.0.1",\n    packages=find_packages(),\n    install_requires=[]\n)\nRun Code Online (Sandbox Code Playgroud)\n/my_pkg/setup.py
\nsetup(\n    name="my_pkg",\n    version="0.0.0",\n    packages=find_packages(),\n    install_requires=[\'flask\', \'non_pypi_pkg\']\n)\nRun Code Online (Sandbox Code Playgroud)\n这里需要按照依赖顺序安装。例如:
\n pip install -e non_pypi_pkg; pip install -e my_pkg;\nRun Code Online (Sandbox Code Playgroud)\n\n\n我更喜欢使用脚本来
\nMakefile完成这些任务,但也可以使用 abash或power-shell脚本,如下所示:
 pip install -e non_pypi_pkg; pip install -e my_pkg;\nRun Code Online (Sandbox Code Playgroud)\n