从pypi下载python包及其依赖项以离线安装到另一台机器的最佳方法是什么?使用pip或easy_install是否有简单的方法来做到这一点?我试图在一个没有连接到互联网的FreeBSD盒子上安装请求库。
下载tarball,将它转移到你的FreeBSD机器并提取它,然后运行python setup.py install,你就完成了!
编辑:在此基础上,您现在还可以使用pip安装焦油球。
如果包在PYPI上,请将它及其依赖项下载到某个本地目录。 如。
$ mkdir /pypi && cd /pypi $ ls -la -rw-r--r-- 1 pavel staff 237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz -rw-r--r-- 1 pavel staff 389741 Feb 22 17:10 Jinja2-2.6.tar.gz -rw-r--r-- 1 pavel staff 70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz -rw-r--r-- 1 pavel staff 2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz -rw-r--r-- 1 pavel staff 1108056 Feb 22 17:10 Werkzeug-0.8.2.tar.gz -rw-r--r-- 1 pavel staff 488207 Apr 10 18:26 boto-2.3.0.tar.gz -rw-r--r-- 1 pavel staff 490192 Apr 16 12:00 flask-0.9-dev-2a6c80a.tar.gz
有些包可能必须手动归档到类似的tarball中。当我想要某个东西的最新(不太稳定)版本时,我经常这样做。有些包不在PYPI上,所以同样适用于它们。
假设您在~/src/myapp中有一个格式正确的Python应用程序。~/src/myapp/setup.py将有install_requires列表,其中提到了你在/pypi目录下的一个或多个东西。像这样:
install_requires=[
'boto',
'Flask',
'Werkzeug',
# and so on
如果你想在运行你的应用程序的同时还能运行所有必要的依赖项,你可以这样做:
$ cd ~/src/myapp $ python setup.py develop --always-unzip --allow-hosts=None --find-links=/pypi
这样,你的应用程序将直接从你的源目录执行。你可以侵入一些东西,然后重新运行应用程序而不需要重建任何东西。
如果你想将你的应用程序及其依赖项安装到当前的python环境中,你会这样做:
$ cd ~/src/myapp $ easy_install --always-unzip --allow-hosts=None --find-links=/pypi .
在这两种情况下,如果/pypi目录中没有一个或多个依赖项,构建将失败。它不会试图从互联网上乱安装丢失的东西。
我强烈建议调用setup.py develop…和easy_install…在活动虚拟环境中,以避免污染您的全局Python环境。这是(virtualenv)应该走的路。不要在全局Python环境中安装任何东西。
If the machine that you've built your app has same architecture as the machine on which you want to deploy it, you can simply tarball the entire virtual environment directory into which you easy_install-ed everything. Just before tarballing though, you must make the virtual environment directory relocatable (see --relocatable option). NOTE: the destination machine needs to have the same version of Python installed, and also any C-based dependencies your app may have must be preinstalled there too (e.g. say if you depend on PIL, then libpng, libjpeg, etc must be preinstalled).
在可以访问internet的系统上
pip download命令允许你下载软件包而不安装它们:
pip download -r requirements.txt
(在pip的以前版本中,这被拼写为pip install——download -r requirements.txt。)
在无法访问internet的系统上
然后你可以使用
pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt
在不访问网络的情况下安装那些下载的模块。
离线python。为此,我使用virtualenv(孤立的Python环境)
1)安装virtualenv 与pip在线:
pip install virtualenv --user
或离线使用whl:转到此链接,下载最新版本(。WHL或tar.gz),并使用以下命令安装:
pip install virtualenv-15.1.0-py2.py3-none-any.whl --user
通过使用——user,您不需要使用sudo pip....
2)使用virtualenv
在在线机器上选择一个终端CD目录并运行以下代码:
python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask
安装完所有的包后,你必须生成一个requirements.txt文件,这样当你的virtualenv处于活动状态时,就可以写了
pip freeze > requirements.txt
打开一个新终端并创建另一个env,如myenv2。
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls
现在您可以转到您的脱机文件夹,其中有requirements.txt和transferred_packages文件夹。下载带有以下代码的包,并将它们全部放到transferred_packages文件夹中。
pip download -r requirements.txt
把您的脱机文件夹到脱机计算机,然后
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt
离线文件夹[requirements.txt, transferred_packages {Flask-0.10.1.tar.gz,…}]
检查你的包裹清单
pip list
注意:因为我们是在2017年,所以最好使用python 3。使用该命令可以创建python 3 virtualenv。
virtualenv -p python3 envname
使用轮子编译包。
包:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)
复制tarball并安装:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/*
注意轮二进制包不是跨机器的。
更多参考资料请访问:https://pip.pypa.io/en/stable/user_guide/#installation-bundles
如果您想离线安装python库及其依赖项,请在具有相同操作系统、网络连接并安装python的机器上完成以下步骤:
1)创建一个包含类似内容的requirements.txt文件(注意-这些是你希望下载的库):
Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0
创建需求文件的一个选项是使用pip freeze > requirements.txt。这将列出环境中的所有库。然后您可以进入requirements.txt,删除不需要的文件。
2)执行命令mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse,将lib及其依赖项下载到目录wheelhouse
3)拷贝requirements.txt到wheelhouse目录
4)用tar -zcf wheelhouse.tar.gz归档wheelhouse到wheelhouse.tar.gz
然后上传wheelhouse.tar.gz到你的目标机器:
1)执行tar -zxf wheelhouse.tar.gz解压文件
2)执行pip install -r wheelhouse/requirements.txt——no-index——find-links wheelhouse安装lib及其依赖项
我也遇到过类似的问题。我必须让它以同样的方式安装,我们从pypi。
我做了以下事情:
创建一个目录来存储机器中所有可以访问internet的包。 Mkdir -p /path/to/packages/ 将所有包下载到该路径下
编辑:你也可以试试: Python3 -m PIP wheel——no-cache-dir -r requirements.txt -w /path/to/packages .txt
pip download -r requirements.txt -d /path/to/packages
Eg:- ls /root/wheelhouse/ # **/root/wheelhouse** is my **/path/to/packages/**
total 4524
-rw-r--r--. 1 root root 16667 May 23 2017 incremental-17.5.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 34713 Sep 1 10:21 attrs-18.2.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 3088398 Oct 15 14:41 Twisted-18.9.0.tar.bz2
-rw-r--r--. 1 root root 133356 Jan 28 15:58 chardet-3.0.4-py2.py3-none-any.whl
-rw-r--r--. 1 root root 154154 Jan 28 15:58 certifi-2018.11.29-py2.py3-none-any.whl
-rw-r--r--. 1 root root 57987 Jan 28 15:58 requests-2.21.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 58594 Jan 28 15:58 idna-2.8-py2.py3-none-any.whl
-rw-r--r--. 1 root root 118086 Jan 28 15:59 urllib3-1.24.1-py2.py3-none-any.whl
-rw-r--r--. 1 root root 47229 Jan 28 15:59 tqdm-4.30.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 7922 Jan 28 16:13 constantly-15.1.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 164706 Jan 28 16:14 zope.interface-4.6.0-cp27-cp27mu-manylinux1_x86_64.whl
-rw-r--r--. 1 root root 573841 Jan 28 16:14 setuptools-40.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 37638 Jan 28 16:15 Automat-0.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 37905 Jan 28 16:15 hyperlink-18.0.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 52311 Jan 28 16:15 PyHamcrest-1.9.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 10586 Jan 28 16:15 six-1.12.0-py2.py3-none-any.whl
Tar包目录,并将其复制到没有互联网接入的机器。那么做的, / /包/ cd /路径 Tar -cvzf packages.tar.gz。#不是。(点)在结尾
将packages.tar.gz复制到没有互联网接入的目标机器。
在没有互联网接入的机器中,执行以下操作(假设您将tar包复制到当前机器中的/path/to/package/) / /包/ cd /路径 Tar -xvzf packages.tar.gz mkdir -p $HOME/.config/pip/ vi $ HOME / config /脉冲/ pip.conf
然后将下面的内容粘贴进去并保存。
[global]
timeout = 10
find-links = file:///path/to/package/
no-cache-dir = true
no-index = true
最后,我建议您使用某种形式的virtualenv来安装软件包。 Virtualenv -p python2 venv #使用python3,如果你在python3 源。/ venv / bin /激活 PIP install <package>
您应该能够下载目录/路径/到/package/下的所有模块。
注意:我只是这样做,因为我不能添加选项或改变我们安装模块的方式。否则我早就这么做了
pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt
让我一步一步地介绍一下这个过程:
在连接到互联网的计算机上创建一个文件夹。
$ mkdir packages
$ cd packages
打开命令提示符或shell并执行以下命令: 假设你想要的包是tensorflow $ PIP下载tensorflow 现在,在目标计算机上复制packages文件夹并应用以下命令
$ cd packages
$ pip install 'tensorflow-xyz.whl' --no-index --find-links '.'
注意tensorflow-xyz。WHL必须替换为所需包的原始名称。
从Pypi下载wheel文件(例如ddb -0.5.0-py3-none-any.whl)
pip install dlb-0.5.0-py3-none-any.whl
作为一个继续@chaokunyang的回答,我想把我写的脚本放在这里:
编写一个“requirements.txt”文件,指定想要打包的库。 创建一个包含所有库的tar文件(参见Packer脚本)。 将创建的tar文件放到目标计算机中并解压缩它。 运行安装程序脚本(它也被打包到tar文件中)。
“让”文件
docker==4.4.0
包装端:文件名:"create-offline-python3.6-dependencies-repository.sh"
#!/usr/bin/env bash
# This script follows the steps described in this link:
# https://stackoverflow.com/a/51646354/8808983
LIBRARIES_DIR="python3.6-wheelhouse"
if [ -d ${LIBRARIES_DIR} ]; then
rm -rf ${LIBRARIES_DIR}/*
else
mkdir ${LIBRARIES_DIR}
fi
pip download -r requirements.txt -d ${LIBRARIES_DIR}
files_to_add=("requirements.txt" "install-python-libraries-offline.sh")
for file in "${files_to_add[@]}"; do
echo "Adding file ${file}"
cp "$file" ${LIBRARIES_DIR}
done
tar -cf ${LIBRARIES_DIR}.tar ${LIBRARIES_DIR}
安装端:文件名:"install-python-libraries-offline.sh"
#!/usr/bin/env bash
# This script follows the steps described in this link:
# https://stackoverflow.com/a/51646354/8808983
# This file should run during the installation process from inside the libraries directory, after it was untared:
# pythonX-wheelhouse.tar -> untar -> pythonX-wheelhouse
# |
# |--requirements.txt
# |--install-python-libraries-offline.sh
pip3 install -r requirements.txt --no-index --find-links .
对于Windows,我使用了下面的东西
网络连接
1.创建任意名称的目录。用"repo"创建的
2.使用以下命令下载库(将下载而不是安装)
pip下载libraray_name -d"C:\repo"
pip download openpyxl -d"C:\repo"
然后您将发现多个.whl扩展名文件 复制requirements.txt中的所有文件名
没有互联网连接
现在将此文件夹和文件移动到没有互联网连接的PC并运行以下命令。
pip install -r requirements.txt --find-links=C:\repo --no-index
推荐文章
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列
- 熊猫在每组中获得最高的n个记录
- 熊猫数据帧得到每组的第一行