パッケージをオフラインでインストールする方法は?


160

Pythonパッケージをダウンロードする最良の方法は何ですか?それは別のマシンにオフラインでインストールするためのpypiからの依存関係ですか?これをpipまたはeasy_installで簡単に行う方法はありますか?インターネットに接続されていないFreeBSDボックスにリクエストライブラリをインストールしようとしています。


回答:


77

パッケージがPYPIにある場合は、パッケージとその依存関係をローカルディレクトリにダウンロードします。例えば

$ mkdir / pypi && cd / pypi
$ ls -la
  -rw-r--r-- pavelスタッフ1人237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz
  -rw-r--r-- pavelスタッフ1人389741 2月22日17:10 Jinja2-2.6.tar.gz
  -rw-r--r-- 1つのpavelスタッフ70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz
  -rw-r--r-- 1つのpavelスタッフ2597214 4月10日18:26 SQLAlchemy-0.7.6.tar.gz
  -rw-r--r-- 1つのpavelスタッフ1108056 2月22日17:10 Werkzeug-0.8.2.tar.gz
  -rw-r--r-- pavelスタッフ1名488207 4月10日18:26 boto-2.3.0.tar.gz
  -rw-r--r-- pavelスタッフ1名490192 4月16日12:00フラスコ-0.9-dev-2a6c80a.tar.gz

一部のパッケージは、似たようなtarballに手動でアーカイブする必要がある場合があります。何かのより最近の(安定性の低い)バージョンが必要な場合、私はそれをよく行います。一部のパッケージはPYPIに含まれていないため、同じことがパッケージに適用されます。

で適切に形成されたPythonアプリケーションがあるとし~/src/myappます。~/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。

どちらの場合も、1つ以上の依存関係が/pypiディレクトリに存在しない場合、ビルドは失敗します。インターネットから不足しているものを無差別にインストールしようとはしません。

私は非常に起動することをお勧めしますsetup.py develop ...easy_install ...、アクティブ内の仮想環境グローバルなPython環境を汚染しないようします。これは(virtualenvです)ほとんどの方法です。グローバルPython環境には何もインストールしないでください。

アプリをビルドしたマシンのアーキテクチャが、アプリをデプロイするマシンと同じである場合は、仮想環境ディレクトリ全体をtarballして、すべてを展開できeasy_installます。ただし、tarballする直前に、仮想環境ディレクトリを再配置可能にする必要があります(--relocatableオプションを参照)。注:宛先マシンには同じバージョンのPythonがインストールされている必要があります。また、アプリにCベースの依存関係もプレインストールされている必要があります(たとえば、PILに依存している場合は、libpng、libjpegなどをプレインストールする必要があります)。 。


3
代わりに--allow-hosts=Noneスイッチを使用できます--no-index
romor

適切に形成されたPythonアプリケーションを作成する方法を詳しく説明していただけますか?
psr 2016

3
@PrabhjotRaiはを参照してくださいpackaging.python.org/distributing
パベル・レーピン

300

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して、ネットワークにアクセスせずに、ダウンロードしたsdistをインストールできます。


これの問題は、依存関係に他の依存関係があり、それらがダウンロードされないことです。
vikki 2013

スネークバスケット(pipの上に構築)は、依存関係の依存関係もダウンロードします。
vikki 2013

14
@vikki正しくありません。「pip install --download」は依存関係もダウンロードするため、要件に追加の依存関係がある場合でも、上記のコマンドは正しく機能します。スネークバスケットは他の便利な機能を実行する場合がありますが(それを使用したことはありません)、そのため、それは必要ありません。
カールマイヤー

6
@vikki私はあなたの言っていることは理解していますが、それは真実ではないことを言っています:-)同じアサーションを再度投稿する前に、実際に試してみる必要があります。私は「pytest」をrequirements.txtに入れて「pip install --download。-r requirements.txt」を実行し、pytestとそのsetup.py依存関係「py」の両方のsdistsをダウンロードしました。
カールマイヤー

3
私はそれはそうあるべきだと思います:--find-links file:/path/to/some/dir/そしてあなたは同じバージョンのpipでダウンロードしてインストールすべきです-そうでなければ失敗するかもしれません
A. Binzxxxxxx

57

python libsとその依存関係をオフラインでインストールする場合は、同じos、ネットワークに接続され、pythonがインストールされているマシンで次の手順を実行してください。

1)requirements.txt同様の内容のファイルを作成します(注-これらはダウンロードしたいライブラリです):

Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0

要件ファイルを作成するための1つのオプションは、を使用することpip freeze > requirements.txtです。これにより、環境内のすべてのライブラリがリストされます。次に、requirements.txt不要なものに移動して削除できます。

2)mkdir wheelhouse && pip download -r requirements.txt -d wheelhouselibとその依存関係をディレクトリにダウンロードするコマンドを実行しますwheelhouse

3)requirements.txtをwheelhouseディレクトリにコピーします

4)wheelhouseをwheelhouse.tar.gzwithにアーカイブしますtar -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してライブラリとその依存関係をインストールします


6
これは初心者のための適切な手順を含む最も明確な答えです。ありがとう
kumarharsh

これは私が今まで見た中で最もパイソン的な方法です。ありがとう!
peluzza

2
しかし、あなたの指示に従って、私pip installが最後に言うと、それは言う:エラー:要件を満たすバージョンが見つかりませんでした..`
DennisLi

@DennisLiあなたのpythonとpipのバージョンは?
chaokunyang

私はパンダをインストールするには、0.2 PIP3を使用して、私は、ピップが私requirements.txtでパンダパッケージの特定のバージョンを見つけることができないためである。このうちの、考え出し
DennisLi

13

オフラインpython。これを行うにはvirtualenv(分離されたPython環境)を使用します

1)pipを使用してvirtualenvをオンラインでインストールします。

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

新しいターミナルを開き、のような別の環境を作成しますmyenv2

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls

これで、requirements.txtand tranferred_packagesフォルダーがあるオフラインフォルダーに移動できます。以下のコードでパッケージをダウンロードし、すべてをtranferred_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、tranferred_pa​​ckages {Flask-0.10.1.tar.gz、...}]

あなたのパッケージのリストをチェックしてください

pip list

注:2017年なので、python 3を使用することをお勧めします。このコマンドでpython 3 virtualenvを作成できます。

virtualenv -p python3 envname

2
ここにステップがないか「難読化」されているように見えますが、「非アクティブ化」してから「pipフリーズ」が表示されるはずです... cd offlineと./tranferred_pa​​ckagesがどこからも表示されません-明らかにこれにはクリーンアップが必要ですか?
Hannu

たぶん、しかし、「私は簡単な投稿が欲しかった」、「そのプロセスは複雑で、すべてのステップを書くことができなかった(YouTubeでしかできない)」と考えるべきです。
cyera

これがベストな答えです。多くを助けました
webofmars

これは、tranferred_pa​​ckagesフォルダーのセットアップ方法について何も言わなかった場合の最良の答えです。重要な手順がない場合、-1
Zim

8

tarballをダウンロードし、それをFreeBSDマシンに転送して解凍し、その後実行python setup.py installすれば完了です!

編集:それに追加するだけで、今すぐpipでtarballをインストールすることもできます。


1
すべての依存関係はどうですか?それらを解決する最良の方法は何ですか?依存関係も手動でインストールする必要がありますか?
クリスドランツ

はい、残念ながらこれが唯一の方法です。
dav1d 2012年

8

プロセスを段階的に見てみましょう:

  1. インターネットに接続されたコンピューターで、フォルダーを作成します。
   $ mkdir packages
   $ cd packages
  1. コマンドプロンプトまたはシェルを開き、次のコマンドを実行します。

    あなたが望むパッケージが tensorflow

    $ pip download tensorflow

  2. 次に、ターゲットコンピューターでpackagesフォルダーをコピーし、次のコマンドを適用します。

  $ cd packages
  $ pip install 'tensorflow-xyz.whl' --no-index --find-links '.'

tensorflow-xyz.whlは、必要なパッケージの元の名前に置き換える必要があることに注意してください。


6

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" *)

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/*

wheelバイナリパッケージはマシン間ではないことに注意してください。

もっと参考 ここ:https : //pip.pypa.io/en/stable/user_guide/#installation-bundles


1
Python 3.6を搭載したマシンでのバンドルと、Python 3.5を使用した別のマシンへの抽出で問題が発生しました:「<package> .whlは、このプラットフォームでサポートされているホイールではありません」。ソースおよび宛先のバージョンは、一部のパッケージと一致する必要がある場合があります。
Juuso Ohtonen 2017年

5

同様の問題がありました。そして、私はそれを同じ方法でインストールさせなければなりませんでした、我々はpypiから行います。

私は次のことをしました:

  1. インターネットにアクセスできるマシン内のすべてのパッケージを格納するディレクトリを作成します。

    mkdir -p /path/to/packages/
  2. すべてのパッケージをパスにダウンロードします

    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
  3. パッケージディレクトリをtarし、インターネットにアクセスできないマシンにコピーします。次に、

    cd /path/to/packages/
    tar -cvzf packages.tar.gz .  # not the . (dot) at the end

    packages.tar.gzを、インターネットにアクセスできない宛先マシンにコピーします

  4. インターネットにアクセスできないマシンで、以下を実行します(taredパッケージを現在のマシンの/ path / to / package /にコピーしたと仮定)

    cd /path/to/packages/
    tar -xvzf packages.tar.gz
    mkdir -p $HOME/.config/pip/
    
    vi $HOME/.config/pip/pip.conf

    以下の内容を貼り付けて保存します。

    [global]
    timeout = 10
    find-links = file:///path/to/package/
    no-cache-dir = true
    no-index = true
  5. 最後に、virtualenvパッケージをインストールするための何らかの形式を使用することをお勧めします。

    virtualenv -p python2 venv # use python3, if you are on python3
    source ./venv/bin/activate
    pip install <package>

ディレクトリ/ path / to / package /にあるすべてのモジュールをダウンロードできるはずです。

注:オプションを追加したり、モジュールのインストール方法を変更したりできなかったので、私はこれを実行しました。そうでなければ私はやっただろう

    pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt

3

Pip 8.1.2の場合、を使用pip download -r requ.txtしてローカルマシンにパッケージをダウンロードできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.