获取 pip 安装包的缓存,以便迁移到断网环境安装,主要有以下几种方法:
1. 使用 pip download
命令 (推荐)
这是最干净、最有效的方法,它专门用于下载包及其依赖项,而不是安装它们。
pip download -d <缓存目录> <包名1> <包名2> ...
<缓存目录>
: 指定下载的包保存的目录,例如packages
或offline_packages
。<包名1> <包名2> ...
: 要下载的包的名称列表。 你可以指定多个包。
示例:
pip download -d packages requests numpy pandas
这会将 requests
, numpy
, 和 pandas
及其所有依赖项下载到 packages
目录中。
优点:
- 明确指定下载,不会意外安装包。
- 自动下载依赖项。
- 下载的包是经过验证的,可以安全安装。
2. 使用 pip wheel
命令
pip wheel
命令用于构建 wheel 文件。 Wheel 文件是一种预编译的包格式,可以加速安装过程。
pip wheel -w <wheel目录> <包名1> <包名2> ...
<wheel目录>
: 指定 wheel 文件保存的目录。<包名1> <包名2> ...
: 要下载的包的名称列表。
示例:
pip wheel -w wheels requests numpy pandas
这会将 requests
, numpy
, 和 pandas
及其所有依赖项构建成 wheel 文件,并保存到 wheels
目录中。
优点:
- 预编译的 wheel 文件安装速度更快。
- 自动下载依赖项。
3. 使用 pip install --download
(不推荐,容易出错)
虽然可以使用 pip install --download
,但强烈不推荐,因为它可能会尝试安装包,如果缺少依赖项或网络连接,可能会失败。
pip install --download <缓存目录> <包名1> <包名2> ...
4. 复制 pip 缓存目录 (不推荐,复杂且可能不完整)
pip 默认会将下载的包缓存到本地目录,但直接复制缓存目录可能不完整,而且目录结构复杂,难以管理。 不同操作系统和 pip 版本,缓存目录位置也不同。
- Linux/macOS:
~/.cache/pip
- Windows:
%LocalAppData%\pip\Cache
如何使用下载的包在断网环境安装:
-
将下载的包或 wheel 文件复制到断网环境。 可以使用 USB 驱动器、移动硬盘或其他方式。
-
使用
--find-links
或--no-index
选项安装。-
--find-links
: 指定本地目录作为包的查找源。 这个选项告诉 pip 在指定的目录下查找包,而不是从 PyPI 上下载。pip install --no-index --find-links=<缓存目录> <包名1> <包名2> ...
例如:
pip install --no-index --find-links=packages requests numpy pandas
-
--no-index
: 阻止 pip 连接到 PyPI。 这与--find-links
结合使用,确保 pip 只在本地目录中查找包。pip install --no-index --find-links=<缓存目录> <包名1> <包名2> ...
-
如果使用 wheel 文件,可以直接指定 wheel 文件进行安装:
pip install --no-index --find-links=<wheel目录> <包名1> <包名2> ...
或更直接:
pip install <wheel目录>/*.whl
-
最佳实践和注意事项:
-
明确指定版本: 为了确保在断网环境中安装的版本与预期一致,最好在下载时明确指定包的版本。
pip download -d packages requests==2.28.1 numpy==1.23.4 pandas==1.5.1
-
记录依赖关系: 如果你不确定要下载哪些依赖项,可以使用
pip freeze
命令生成一个requirements.txt
文件,然后使用pip download -r requirements.txt
下载所有依赖项。pip freeze > requirements.txt pip download -d packages -r requirements.txt
-
使用虚拟环境: 在下载和安装时,最好使用虚拟环境,以隔离不同项目的依赖项,避免冲突。
-
检查平台兼容性: 确保下载的包与目标断网环境的操作系统和 Python 版本兼容。 Wheel 文件通常包含平台信息。
-
解决依赖冲突: 在断网环境下安装时,如果遇到依赖冲突,需要手动解决。 仔细阅读错误信息,并尝试调整包的版本,直到所有依赖项都满足为止。
总结:
使用 pip download
命令是最推荐的方法,因为它清晰、安全、方便,并且可以自动下载依赖项。 结合 --no-index
和 --find-links
选项,可以轻松地在断网环境中安装包。 记住,提前规划好依赖关系,并明确指定版本,可以避免不必要的麻烦。