Python包离线安装

Chr*_*ntz 129 python freebsd pip easy-install python-requests

下载python包的最佳方法是什么?它是pypi的依赖关系,可以在另一台机器上进行离线安装?使用pip或easy_install有什么简单的方法吗?我正在尝试在没有连接到互联网的FreeBSD盒子上安装请求库.

Car*_*yer 254

使用pip download命令可以在不安装包的情况下下载包:

pip download -r requirements.txt

(在以前版本的pip中,这是拼写的pip install --download -r requirements.txt.)

然后,您可以使用pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt安装这些下载的sdists,而无需访问网络.

  • @vikki不正确,"pip install --download"也会下载依赖项,因此即使您的需求具有其他依赖项,上述命令也能正常工作.蛇篮可能会做其他有用的事情(从未使用它),但出于这个原因绝对不需要它. (13认同)
  • @vikki我明白你在说什么,但我告诉你这不是真的:-)你应该在再次发布相同的断言之前尝试一下.我只是将"pytest"放在requirements.txt中,运行"pip install --download.-r requirements.txt",然后下载了pytest及其setup.py依赖项"py"的sdists. (6认同)
  • 问题在于依赖项可能具有其他依赖项,并且不会下载这些依赖项。 (2认同)
  • 就像@vikki一样,对我来说这也没有下载整个依赖图。不过,我仍然很欣赏这个答案,因为它只缺少一个包,我只是将其显式添加到requirements.txt中。 (2认同)
  • 我认为它应该是:`--find-links文件:/ path/to/some/dir /`你应该下载并安装相同版本的pip - 否则它可能会失败 (2认同)
  • @stackprotector,是的,我发现在尝试此过程之前在离线计算机上运行“python --version”非常有帮助!然后,在您的在线计算机上,根据 [pip download docs](https://pip.pypa.io/en/stable/cli/pip_download/),您可以运行(对于 Python 3.8.2): `pip download - -python-version=3.8.2 --only-binary=:all: -r requests.txt`。 (2认同)

Pav*_*pin 70

如果程序包在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

有些包可能需要手工存档到类似的tar包中.当我想要更新的(不太稳定)版本的东西时,我会做很多事情.有些包不在PYPI上,因此同样适用于它们.

假设你有一个正确形成的Python应用程序~/src/myapp.~/src/myapp/setup.py将有install_requires列表提及您/pypi目录中的一个或多个内容.像这样:

  install_requires=[
    'boto',
    'Flask',
    'Werkzeug',
    # and so on
Run Code Online (Sandbox Code Playgroud)

如果您希望能够运行具有所有必要依赖项的应用程序,同时还要攻击它,您将执行以下操作:

$ 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环境中安装任何东西.

如果您构建应用程序的计算机具有与要部署它的计算机相同的体系结构,那么您可以简单地将整个虚拟环境目录压缩到您所拥有的easy_install所有内容中.在压缩之前,您必须使虚拟环境目录可重定位(请参阅--relocatable选项).注意:目标计算机需要安装相同版本的Python,并且还必须预先安装您的应用程序可能具有的任何基于C的依赖项(例如,如果您依赖于PIL,则必须预先安装libpng,libjpeg等) .

  • 而不是`--allow-hosts = None`你可以使用开关`--no-index` (3认同)
  • @PrabhjotRai请参考https://packaging.python.org/distributing/ (3认同)

cha*_*ang 19

如果要脱机安装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
Run Code Online (Sandbox Code Playgroud)

创建需求文件的一种方法是使用pip freeze > requirements.txt。这将列出您环境中的所有库。然后,您可以进入requirements.txt并删除不需要的内容。

2)执行命令mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse以将库及其依赖项下载到目录wheelhouse

3)将requirements.txt复制到wheelhouse目录中

4)存档驾驶室成wheelhouse.tar.gztar -zcf wheelhouse.tar.gz wheelhouse

然后上传wheelhouse.tar.gz到您的目标计算机:

1)执行tar -zxf wheelhouse.tar.gz以提取文件

2)执行pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse以安装库及其依赖项

  • 此工作流程的一个问题是不同的架构。如果您在 Mac 上运行“pip download ...”,您将拥有在 Linux 等上无法使用的“*-macosx*.whl”文件 (4认同)
  • 对于初学者来说,这是最清楚的答案,并提供适当的步骤。谢谢 (2认同)
  • 但按照你的指示,当我最后“pip install”时,它说:错误:找不到满足要求的版本..` (2认同)

cye*_*era 11

离线python.为此,我使用virtualenv(孤立的Python环境)

1)用pip在线安装virtualenv:

pip install virtualenv --user
Run Code Online (Sandbox Code Playgroud)

或者使用whl离线:转到此链接,下载最新版本(.whl或tar.gz)并使用以下命令安装:

pip install virtualenv-15.1.0-py2.py3-none-any.whl --user
Run Code Online (Sandbox Code Playgroud)

通过使用--user你不需要使用sudo pip….

2)使用virtualenv

在线机器上选择一个带终端的目录cd并运行以下代码:

python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask
Run Code Online (Sandbox Code Playgroud)

在安装所有软件包之后,你必须requirements.txt在你的virtualenv处于活动状态时生成一个,写一下

pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)

打开一个新终端并创建另一个环境myenv2.

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls
Run Code Online (Sandbox Code Playgroud)

现在,您可以转到您的requirements.txttranferred_packages文件夹所在的脱机文件夹.使用以下代码下载软件包并将所有软件包放入tranferred_packages文件夹.

pip download -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

将您的脱机文件夹转到脱机计算机然后

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

脱机文件夹中的内容[requirements.txt,tranferred_pa​​ckages {Flask-0.10.1.tar.gz,...}]

检查包裹清单

pip list
Run Code Online (Sandbox Code Playgroud)

注意:我们在2017年最好使用python 3.您可以使用此命令创建python 3 virtualenv.

virtualenv -p python3 envname
Run Code Online (Sandbox Code Playgroud)

  • 这里似乎缺少或“模糊不清”的步骤,我希望看到“停用”然后“点冻结” ... cd脱机,。/ tranferred_pa​​ckages无处出现-显然这需要清理吗? (2认同)

han*_*olo 10

我有一个类似的问题。而且我必须以相同的方式安装它,我们从 pypi 安装。

我做了以下几件事:

  1. 创建一个目录来存储可以访问 Internet 的机器中的所有包。

    mkdir -p /path/to/packages/
    
    Run Code Online (Sandbox Code Playgroud)
  2. 下载所有包到路径

编辑:您也可以尝试:

python3 -m pip wheel --no-cache-dir -r requirements.txt -w /path/to/packages
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
  1. tar 包目录并将其复制到无法访问 Internet 的机器上。然后做,

    cd /path/to/packages/
    tar -cvzf packages.tar.gz .  # not the . (dot) at the end
    
    Run Code Online (Sandbox Code Playgroud)

packages.tar.gz复制到无法访问互联网的目标机器中。

  1. 在无法访问 Internet 的机器上,执行以下操作(假设您将 tarred 包复制到当前机器中的/path/to/package/

    cd /path/to/packages/
    tar -xvzf packages.tar.gz
    mkdir -p $HOME/.config/pip/
    vi $HOME/.config/pip/pip.conf
    
    Run Code Online (Sandbox Code Playgroud)

并将以下内容粘贴到其中并保存。

[global]
timeout = 10
find-links = file:///path/to/package/
no-cache-dir = true
no-index = true
Run Code Online (Sandbox Code Playgroud)
  1. 最后,我建议您使用某种形式virtualenv来安装软件包。

    virtualenv -p python2 venv # use python3, if you are on python3
    source ./venv/bin/activate
    pip install <package>
    
    Run Code Online (Sandbox Code Playgroud)

您应该能够下载目录/path/to/package/中的所有模块。

注意:我只这样做了,因为我无法添加选项或更改我们安装模块的方式。否则我会做

pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt
Run Code Online (Sandbox Code Playgroud)


aru*_*hub 10

让我一步一步地完成整个过程:

  1. 在连接到 Internet 的计算机上,创建一个文件夹。
   $ mkdir packages
   $ cd packages
Run Code Online (Sandbox Code Playgroud)
  1. 打开命令提示符或 shell 并执行以下命令:

    假设你想要的包是 tensorflow

    $ pip download tensorflow

  2. 现在,在目标计算机上,复制packages文件夹并应用以下命令

  $ cd packages
  $ pip install 'tensorflow-xyz.whl' --no-index --find-links '.'
Run Code Online (Sandbox Code Playgroud)

请注意,tensorflow-xyz.whl必须替换为所需包的原始名称。


sta*_*tor 9

对于具有另一个 Python 版本的另一个平台

要下载其他平台的python包,需要将--platform参数与--only-binary=:all:参数结合使用。要同时定义目标系统的 Python 版本,请使用--python-version参数。

示例场景:您使用的是 Windows,并且想要下载numpy使用 Python 3.9 的 Linux 系统。使用以下命令下载numpy目标系统的所有依赖项:

pip download --platform=manylinux1_x86_64 --only-binary=:all: --python-version=3.9 numpy
Run Code Online (Sandbox Code Playgroud)

numpy在目标系统上安装,请将下载的文件复制到其中并通过以下方式安装软件包:

pip install --no-index --find-links /path/to/package/files numpy
Run Code Online (Sandbox Code Playgroud)

您还可以为这两个命令使用需求文件,而不是定义特定的包名称。-r requirements.txt例如,只需将包名称替换为。


dav*_*v1d 7

下载tarball,将其传输到你的FreeBSD机器并提取它,然后运行python setup.py install,你就完成了!

编辑:只需添加,你也可以用pip安装tarball.


Vij*_*rya 7

对于 Windows,我使用了以下东西

网络连接

1.创建任意名称的目录。我用“repo”创建的

2.使用以下命令下载库(它将下载而不是安装)

pip 下载 libraray_name -d"C:\repo"

pip download openpyxl -d"C:\repo"
Run Code Online (Sandbox Code Playgroud)
  1. 然后你会发现多个.whl扩展文件

  2. 复制requirements.txt中的所有文件名 在此输入图像描述

没有网络连接

  1. 现在将此文件夹和文件移动到没有互联网连接的电脑并运行以下命令。
pip install -r requests.txt --find-links=C:\repo --no-index

您可以阅读详细博客链接


esh*_*han 5

使用wheel编译的包.

打包:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)
Run Code Online (Sandbox Code Playgroud)

复制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/*
Run Code Online (Sandbox Code Playgroud)

注意wheel二进制包不是跨机器的.

更多参考.这里:https://pip.pypa.io/en/stable/user_guide/#installation-bundles


Rea*_*aas 5

作为@chaokunyang 的继续回答,我想将我编写的完成工作的脚本放在这里:

  1. 编写一个“requirements.txt”文件,指定要打包的库。
  2. 创建一个包含所有库的 tar 文件(请参阅 Packer 脚本)。
  3. 将创建的 tar 文件放入目标机器并解压。
  4. 运行安装程序脚本(也打包到 tar 文件中)。

“需求.txt”文件

docker==4.4.0
Run Code Online (Sandbox Code Playgroud)

加壳端:文件名:“create-offline-python3.6-dependency-repository.sh”

#!/usr/bin/env bash

# This script follows the steps described in this link:
# /sf/answers/3615244811/

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}
Run Code Online (Sandbox Code Playgroud)

安装程序端:文件名:“install-python-libraries-offline.sh”

#!/usr/bin/env bash

# This script follows the steps described in this link:
# /sf/answers/3615244811/

# 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 .
Run Code Online (Sandbox Code Playgroud)