You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让pip递归搜索目录安装包及依赖?含场景与包格式疑问

关于pip递归搜索路径安装包及包类型的问题

1. pip默认不支持递归搜索文件系统路径

首先明确:pip的--find-links(简写-f)参数不会自动递归遍历子目录。你遇到的pip install packageA -f C:\packages\无效,正是因为pip只会检查C:\packages\目录下的文件,不会深入到packageA\1.0.0packageB\2.2.1这类子目录里查找包文件。

要解决这个问题,有几个可行的方案:

  • 方案一:指定所有包含包的子目录
    把每个存放包文件的版本目录都加入--find-links,同时加上--no-index避免从PyPI下载:

    pip install packageA --no-index --find-links=C:\packages\packageA\1.0.0 --find-links=C:\packages\packageA\1.0.1
    

    这个方法直观但如果包版本多会比较繁琐。

  • 方案二:生成本地索引页面
    C:\packages\目录下创建一个index.html文件,里面列出所有包文件的链接(不管是源码包还是二进制包),示例内容如下:

    <html>
      <body>
        <a href="packageA/1.0.0/packageA-1.0.0.tar.gz">packageA-1.0.0.tar.gz</a><br>
        <a href="packageA/1.0.1/packageA-1.0.1.tar.gz">packageA-1.0.1.tar.gz</a><br>
        <a href="packageB/2.2.1/packageB-2.2.1.whl">packageB-2.2.1.whl</a><br>
        <a href="packageB/2.2.4/packageB-2.2.4.whl">packageB-2.2.4.whl</a><br>
      </body>
    </html>
    

    之后运行命令:

    pip install packageA --no-index --find-links=C:\packages\
    

    这时pip会读取index.html里的链接,自动匹配合适的版本安装。

  • 方案三:直接安装指定版本的包文件
    如果不需要自动选择版本,可以直接指向具体的包文件路径:

    pip install C:\packages\packageA\1.0.1\packageA-1.0.1.tar.gz
    

2. 源码包与二进制包都支持

不管是带有setup.py的纯Python源码包,还是二进制包(比如.whl格式),pip都完全支持安装:

  • 纯源码包:pip会自动执行setup.py完成编译(纯Python包无需编译)和安装,只要包的结构符合Python打包规范即可,不需要额外配置。
  • 二进制包:安装速度更快,不需要本地编译环境,尤其适合带有C扩展的包。

内容的提问来源于stack exchange,提问作者supertommy

火山引擎 最新活动