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

如何在无PyPI联网情况下将带依赖的pip包安装到本地目录

解决方案:离线安装foo-py到指定本地目录(无网络、无虚拟环境)

当然可行!我来给你梳理一套精准的离线安装方案,完美匹配你的需求——既确保依赖被正确安装,又完全不联网,还能直接把包放到你指定的目录里。

第一步:整理本地包资源

先把所有需要的包文件放到同一个本地目录里,比如C:\Users\Me\LocalPackages

  • foo-py的源码包(比如foo-py-0.1.0.tar.gz)或者wheel文件
  • 它的所有依赖包(比如lxml对应的wheel文件,最好和你的Python版本、系统架构匹配,比如lxml-4.9.3-cp311-cp311-win_amd64.whl

第二步:用pip执行完全离线的安装命令

关键是要给pip加上禁止联网指定本地资源来源的参数,避免它去PyPI查索引。执行以下命令:

pip install foo-py --no-index --find-links=file:///C:/Users/Me/LocalPackages -t C:\Users\Me\SomePythonProgram\Modules

如果foo-py是你本地的未打包源码目录(比如直接下载的git仓库文件夹),可以直接指定目录路径:

pip install C:\Users\Me\LocalPackages\foo-py --no-index --find-links=file:///C:/Users/Me/LocalPackages -t C:\Users\Me\SomePythonProgram\Modules

为什么这个命令能解决你的问题?

  • --no-index:强制pip完全不依赖PyPI索引,只从你指定的本地目录找包
  • --find-links:告诉pip去哪里找所有需要的包(包括foo-py和它的依赖lxml),Windows路径要写成file:///C:/xxx的格式(三个斜杠开头)
  • -t:直接把包安装到你指定的Modules目录,不会生成多余的lib/python子目录

为什么你之前的尝试失败了?

  • -e(可编辑安装)时,--find-links指向目标目录是错误的——目标目录一开始是空的,pip找不到依赖;而且没加--no-index,pip还是会尝试联网去PyPI验证包信息
  • python setup.py install默认会把包安装到系统Python的site-packages,用--prefix指定目录确实会生成lib/python结构,不符合你的需求,所以还是用pip install -t更合适

后续:让Python能找到安装的包

安装完成后,要让你的SomePythonProgram能import这些包,需要把目标目录添加到PYTHONPATH:

  • 临时方法:在你的代码开头添加:
import sys
sys.path.append(r'C:\Users\Me\SomePythonProgram\Modules')
  • 永久方法:在Windows系统环境变量里添加PYTHONPATH,值为C:\Users\Me\SomePythonProgram\Modules

验证安装

安装完成后,你可以去C:\Users\Me\SomePythonProgram\Modules目录查看,应该能看到foo-py和lxml的文件夹。打开Python终端尝试import:

import foo_py
import lxml

如果没有报错,就说明安装成功了!

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

火山引擎 最新活动