Python Packages Offline Installation
从pypi下载python包和它的依赖项以便在另一台机器上进行离线安装的最佳方法是什么?有什么简单的方法可以通过PIP或简单的安装来做到这一点吗?我正在尝试将请求库安装在未连接到Internet的FreeBSD设备上。
pip
(在以前版本的pip中,这个单词拼写为
然后,您可以使用
如果包在pypi上,请将它及其依赖项下载到某个本地目录。例如。
1 2 3 4 5 6 7 8 9 | $ 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 |
有些包裹可能需要手工归档成类似的tarballs。当我想要一个更新的(不太稳定的)版本的东西时,我经常这样做。有些包不在pypi上,所以它们也适用。
假设您在
1 2 3 4 5 | install_requires=[ 'boto', 'Flask', 'Werkzeug', # and so on |
如果你想在黑客攻击的同时运行你的应用程序,你可以这样做:
1 2 | $ cd ~/src/myapp $ python setup.py develop --always-unzip --allow-hosts=None --find-links=/pypi |
这样,应用程序将直接从源目录执行。你可以破解一些东西,然后重新运行应用程序而不需要重建任何东西。
如果要将应用程序及其依赖项安装到当前的Python环境中,您将执行以下操作:
1 2 | $ cd ~/src/myapp $ easy_install --always-unzip --allow-hosts=None --find-links=/pypi . |
在这两种情况下,如果在
我强烈建议在活动的虚拟环境中调用
如果您构建应用程序的机器与您要在其上部署应用程序的机器具有相同的体系结构,那么您可以简单地对整个虚拟环境目录进行tarball处理,您可以将所有内容添加到该目录中。不过,在进行tarballing之前,必须使虚拟环境目录可重定位(请参见--relocatable选项)。注意:目标机器需要安装相同版本的python,并且应用程序可能也必须预先安装基于C的依赖项(例如,假设您依赖pil,则必须预先安装libpng、libjpeg等)。
离线python。为此,我使用virtualenv(独立的python环境)
1)安装virtualenv在线PIP:
1 | pip install virtualenv --user |
或使用whl脱机:转到此链接,下载最新版本(.whl或tar.gz)并使用以下命令安装:
1 | pip install virtualenv-15.1.0-py2.py3-none-any.whl --user |
使用
2)使用virtualenv
在联机机器上,选择带有终端
1 2 3 4 | python -m virtualenv myenv cd myenv source bin/activate pip install Flask |
安装完所有软件包后,您必须生成一个
1 | pip freeze > requirements.txt |
打开一个新终端并创建另一个env,如
1 2 3 4 5 | python -m virtualenv myenv2 cd myenv2 source bin/activate cd - ls |
现在,您可以转到脱机文件夹,其中包含您的
1 | pip download -r requirements.txt |
将脱机文件夹带到脱机计算机,然后
1 2 3 4 5 6 | 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,tranfered_packages flask-0.10.1.tar.gz,]
你的包裹清单
1 | pip list |
注意:正如我们在2017年所做的,最好使用python 3。可以使用此命令创建python 3 virtualenv。
1 | virtualenv -p python3 envname |
下载tarball,把它转移到你的freebsd机器并提取它,然后运行
编辑:除了这个,你现在也可以用pip安装tarballs。
如果要脱机安装python libs及其依赖项,请在安装了相同操作系统、网络连接和python的计算机中完成以下步骤:
1)创建一个
1 2 3 4 5 | Flask==0.12 requests>=2.7.0 scikit-learn==0.19.1 numpy==1.14.3 pandas==0.22.0 |
2)执行命令
3)将requirements.txt复制到
4)用
然后上传
1)执行
2)执行
使用
捆绑:
1 2 3 4 | $ 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并安装:
1 2 3 | $ 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/安装包
对于PIP 8.1.2,可以使用
我也有类似的问题。我必须让它以同样的方式安装,我们从Pypi安装。
我做了以下事情:
创建一个目录来存储计算机中所有可以访问Internet的包。
1 | mkdir -p /path/to/packages/ |
将所有包下载到路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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包目录并将其复制到没有Internet访问权限的计算机上。然后这样做,
1 2 | cd /path/to/packages/ tar -cvzf packages.tar.gz . # not the . (dot) at the end |
将packages.tar.gz复制到没有Internet访问的目标计算机中。
在没有Internet访问权限的计算机中,执行以下操作(假设您将已标记的包复制到当前计算机中的/path/to/package/)
1 2 3 4 5 | cd /path/to/packages/ tar -xvzf packages.tar.gz mkdir -p $HOME/.config/pip/ vi $HOME/.config/pip/pip.conf |
并将以下内容粘贴到内部并保存。
1 2 3 4 5 | [global] timeout = 10 find-links = file:///path/to/package/ no-cache-dir = true no-index = true |
最后,我建议您使用某种形式的
1 2 3 | virtualenv -p python2 venv # use python3, if you are on python3 source ./venv/bin/activate pip install <package> |
您应该能够下载目录/path/to/package/中的所有模块。
注意:我之所以这样做,是因为我无法添加选项或更改模块的安装方式。否则我会的
1 | pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt |