1. ホーム
  2. パイソン

[解決済み】オフラインでパッケージをインストールする方法は?

2022-04-19 11:01:14

質問

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

解決方法は?

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にないパッケージもあるので、それらにも同じことが言えます。

きちんとしたPythonのアプリケーションが ~/src/myapp . ~/src/myapp/setup.py を持つことになります。 install_requires の中にある1つ以上のものに言及したリストです。 /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する前に、仮想環境ディレクトリをリロケータブルにする必要があります ( --リロケータブル オプション)。 NOTE は、インストール先のマシンに同じバージョンの Python がインストールされている必要があり、また、アプリが持つかもしれない C ベースの依存関係もそこにプリインストールされている必要があります(例えば、あなたが ピル libpng、libjpegなどがプリインストールされている必要があります)。