Pythonパッケージを別のディレクトリにpipを使用してインストールしますか?


433

明らかな答えはvirtualenvとvirtualenvwrapperを使用することですが、さまざまな理由から、それを行うことはできません。

コマンドを変更するにはどうすればよいですか

pip install package_name

pipデフォルト以外の場所にパッケージをインストールするようにするにはsite-packages



2
次に、2番目の質問です。すでにカスタムディレクトリにインストールしている場合pip、非カスタムディレクトリから古いバージョンを削除しないようにする方法。たとえば、書き込み権限がないシステム全体の場合です。これまでのところ、私はこれをオフにするだけでしたeasy_install...
Tomasz Gandor 14

2
@TomaszGandor --ignore-installedオプションを使用すると、pipが既にインストールされているパッケージをアンインストールしようとするのを防ぐことができると思います。
Piotr Dobrogost

申し訳ありませんが、pipは初めてですが、あなたの質問は、「piを別のバージョンのpythonにインストールする方法として」尋ねることと同じですか?私はpython 3.4と3.5を持っていますが、自分のpipインストールをpython 3.5に移動したいと思っています。
チャーリーパーカー

@チャーリー・ノープ、別の質問。私はあなたのインストール/意図について十分に知りませんが、一般的に私はおそらくvirtualenvwrapperを使用して、次のような仮想環境を作成しますmkvirtualenv --python=/usr/bin/python3.5 env_name
Monika Sulik

回答:


334

使用する:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

また、を使用--ignore-installedして、この新しいプレフィックスを使用してすべての依存関係を強制的に再インストールすることもできます。--install-option複数回使用して、使用できるオプションを追加することができますpython setup.py install--prefixたぶんあなたが望んでいることですが、使用できるオプションは他にもたくさんあります)。


5
これを行う場合pip freeze、代替ディレクトリを表示する方法はありますか?
Russ

7
ピップフリーズはパスを探しますので、もしあなたがそれのようなPYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freezeものならそれらを見るはずです。
イアンビッキング2011

4
--prefix=$PREFIX_PATHシステム固有のサフィックスが追加されている(\Lib\site-packagesWindowsなど)ため、使用してもインストールディレクトリを完全に制御することはできないようです。特定のディレクトリを指定する方法はありますか?
Piotr Dobrogost

1
@Piotr:はい、私の回答を参照してください。'--prefix'の使用は少し粗雑ですが、純粋なpythonを/usr/local/lib/pythonX.Y/site-の代わりに/usr/lib/pythonX.Y/site-packagesの下に置きたい場合はうまく機能します。パッケージ。
Anthon

79
4年前の悪い答えではありませんが、-targetオプションは現在存在しています。
Tritium21 2014

545

--targetスイッチは、あなたが探しているものです。

pip install --target=d:\somewhere\other\than\the\default package_name

ただし、その場所から実際に使用するには、まだに追加d:\somewhere\other\than\the\defaultする必要がありPYTHONPATHます。

-t、--target <dir>
パッケージを<dir>にインストールします。デフォルトでは、これは<dir>内の既存のファイル/フォルダーを置き換えません。
--upgradeを使用して、<dir>内の既存のパッケージを新しいバージョンに置き換えます。


ターゲットスイッチが利用できない場合は、pipをアップグレードします。

LinuxまたはOS Xの場合:

pip install -U pip

Windowsの場合(これは問題を回避します):

python -m pip install -U pip

8
@DanH run pip install --upgrade pip
r3m0t 2014年

16
これは本当の答えです。それは、受け入れられた答えの後にかなり多くのオプションが追加されただけです。
bukzor 2014

5
--install-option="--prefix=$PREFIX_PATH"@Ian Bickingと--target=$PATHオプションの違いは何ですか?
Hibou57 2014

6
targetはpipオプションであり、入力したものはすべてinstall-optionに渡されsetup.py install commandます。基本的にtargetはカスタムサイトパッケージの場所です。
Janusz Skonieczny 2014

10
を使用--targetすると、指定された接頭辞に含まれるスクリプト/データファイルをインストールしないため、部分的にインストールされる可能性があります。渡すように思える--prefixとすると、--install-option使用済みのインストールプレフィックスを完全に制御を持っている唯一の適切な方法です。
Kenneth Hoste、2015年

73

--targetオプションまたはオプションの代わりに、--install-options以下がうまく機能することを発見しました(https://github.com/pypa/pip/issues/446でのこの問題に関するバグの議論から):

PYTHONUSERBASE=/path/to/install/to pip install --user

(またはPYTHONUSERBASE、コマンドを実行する前に、環境にディレクトリを設定して、export PYTHONUSERBASE=/path/to/install/to

これは非常に便利な使用--userオプションをしかし作るためにそれを伝えbinlibshareおよびカスタム接頭語の下ではなく、期待する他のディレクトリ$HOME/.local

次に、通常のインストールディレクトリと同じようにPATH、これをPYTHONPATH他の変数に追加できます。

また、 --upgradeシステムが提供するバージョンを上書きするため--ignore-installedに、これに依存するパッケージに新しいバージョンをPYTHONUSERBASEディレクトリにインストールする必要がある場合およびオプションます。

完全な例:

PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy

インストール..to scipynumpyあなたは、あなたの中に含めることができるディレクトリに最新バージョンをパッケージ化PYTHONPATHので、(bashのを使用して、この例のCentOS 6上のpython 2.6用)のように:

export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH

virtualenvを使用することは、より優れた、すてきなソリューションです!


4
これは、Dockerコンテナーで実行されているTravis CIで機能しましたが、-install-option = "-prefix = $ PREFIX_PATH"ソリューションでは機能しませんでした。
32ビット

1
Noobieの質問、いかに重要かをされた/binフォルダのピップは、作成し--userないようにそれを作成し--PREFIX、一方--targetません。
ジョナサン

1
パッケージがグローバルPythonにインストールされている場合は、--ignore-installed必要です。
ジョージソベトフ2017年

1
このオプションは--editable、ローカルインストールと互換性があります。
mdh 2017

1
このオプションは、他の非rootユーザーのスーパーユーザーとしてパッケージをインストールする場合に便利ですsu(たとえば、コンテナーでは問題になる可能性があります)。
mdh 2017

43

多くの場合、Pythonパッケージのインストールには、一部の純粋なPythonファイルのみが含まれます。パッケージにデータ、スクリプト、実行可能ファイルが含まれている場合、これらは純粋なPythonファイルとは異なるディレクトリにインストールされます。

パッケージにdata / scripts / executablesがなく、Pythonファイルを入れたい/python/packages/package_name(そして/python/packagesを使用するときのように数レベル下のサブディレクトリに入れない)と仮定すると、次のような--prefix1回限りのコマンドを使用できます。

pip install --install-option="--install-purelib=/python/packages" package_name

すべての(またはほとんどの)パッケージをそこに移動したい場合は、次のもの~/.pip/pip.confを含めるように編集できます。

[install]
install-option=--install-purelib=/python/packages

そうすれば、何度も指定することを忘れることができません。

パッケージに含まれているexcecutables / data / scriptsは、追加のインストールオプションを指定しない限り、デフォルトの場所に移動します(カスタムインストールオプションの詳細については、--prefix/ --install-data/ --install-scriptsなど)。


1
設定ファイルの大きなプラス。--prefixホームディレクトリの共有サーバーに「ローカル」ディレクトリがあり、easy_installに移動する前にプレフィックスとして使用されていたため、ここで個人的に指定しましたpip。システム$PATH$PYTHONPATH以前に構成されました。代わりに、install-option=--install-purelib=/blahこの新しいtarget=/blahオプション/スイッチがあります。それもいいですが、またはで--prefix使用するの代わりが必要な場合もあります。setup.pyeasy_install
Tomasz Gandor


18

誰も-tオプションについて言及していないようですが、それが最も簡単です。

pip install -t <direct directory> <package>

8
-tオプションには短いバージョンである--target別の答え(に記載されているオプションstackoverflow.com/a/19404371/594053 :))
MattiSG

14

@Ian Bickingの回答に1ポイント追加してください:

--userインストールされたディレクトリを指定するオプションを使用すると、リモートサーバーのホームディレクトリ(sudoユーザー権限なし)にPythonパッケージをインストールする場合にも機能します。

例えば、

pip install --user python-memcached

コマンドは、PYTHONPATHにリストされているディレクトリの1つにパッケージをインストールします。


14

これらのオプションをpython3.5およびpip 9.0.3でテストしました。

pip install --target / myfolder [パッケージ]

/ myfolderの下の依存関係を含むすべてのパッケージをインストールします。依存パッケージがすでにPythonの他の場所にインストールされていることを考慮していません。/ myfolder / [package_name]からパッケージを見つけます。複数のPythonバージョンがある場合、これは考慮されません(パッケージフォルダー名にPythonバージョンがありません)。

pip install --prefix / myfolder [パッケージ]

チェックは、既にインストールされている依存関係です。/myfolder/lib/python3.5/site-packages/[packages]にパッケージをインストールします

pip install --root / myfolder [パッケージ]

--prefixなどの依存関係をチェックしますが、インストール場所は/myfolder/usr/local/lib/python3.5/site-packages/[package_name]になります。

pip install --user [パッケージ]

$ HOMEにパッケージをインストールします:/home/[USER]/.local/lib/python3.5/site-packages Pythonはこの.localパスから自動的に検索するため、PYTHONPATHに置く必要はありません。

=>ほとんどの場合、-userが最適なオプションです。何らかの理由で--prefixを使用してホームフォルダを使用できない場合。


Python 2.7.16の下で実行すると、たとえば--target(または--prefix)はJinja2-2.10.1.dist-info /をインストールしますが、install --install-option = "-prefixはJinja2-2.10.1-py2をインストールします.7.egg-info /、これは私が実際に欲しかったものです
Greg Dougherty

13

新しいバージョンpip(8以降)では、この--prefixオプションを直接使用できます

pip install --prefix=$PREFIX_PATH package_name

ここ$PREFIX_PATHで、lib、bin、およびその他の最上位フォルダが配置されるインストールプレフィックスです。



4

すでに良いアドバイスを追加します。書き込み権限がないときにIPythonのインストールに問題があったためです。/usr/localます。

pipはdistutilsを使用してインストールを実行します。このスレッドは、依存しているため問題が発生する可能性がある方法について説明しますsys.prefix設定ます。

IPythonインストールがPermission deniedで '/ usr / local / share / man / man1'に書き込もうとしたときに、私の問題が発生しました。インストールが失敗したため、binディレクトリにIPythonファイルを書き込むようには見えませんでした。

「--user」を使用すると機能し、ファイルは〜/ .localに書き込まれました。〜/ .local / binを$ PATHに追加すると、そこから「ipython」を使用できるようになります。

しかし、私は多くのユーザーのためにこれをインストールしようとしていて、/usr/local/lib/python2.7ディレクトリへの書き込み許可が与えられていました。その下に「bin」ディレクトリを作成し、distutilsのディレクティブを設定しました。

vim ~/.pydistutils.cfg

[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin

次に(-I以前の失敗/.localインストールにもかかわらず、インストールを強制するために使用されます):

pip install -I ipython

次に、に追加/usr/local/lib/python2.7/binしました$PATH

sudoアクセス権のないマシンで他の誰かが同様の問題を抱えている場合に備えて、これを含めようと思いました。


2

pythonでbrewを使用している場合、残念ながら、pip / pip3は非常に限られたオプションで出荷されます。上記の--install-option、-target、-userオプションはありません。

pip install --userに関する注意
通常のpip install --userは、醸造されたPythonでは無効になっています。これは、Homebrewがパッケージプレフィックスを設定するdistutils.cfgを書き込むため、distutilsのバグが原因です。可能な回避策(実行可能スクリプトを〜/ Library / Python /./ binに置く)は次のとおりです。 python -m pip install --user --install-option="--prefix=" <package-name>

この行は非常に扱いにくいかもしれません。管理にはpyenvを使用することをお勧めします。使用している場合

brew upgrade python python3

皮肉なことに、あなたは実際 pip機能をダウングレードしています。

(私がこの回答を投稿したのは、私のMac osxのpipに--targetオプションがなく、何時間もかけて修正したからです)


明示的な接頭辞を付けたこの回答は、ignore-installed以前の努力により、私にとってはうまくpython -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
Jeremy Jones

0

v1.5.6Pythonのpip v2.7.3(GNU / Linux)では、オプション--rootにより、特定のパッケージのオプションに関係なく、(明らかに)グローバルインストールプレフィックスを指定できます。fiを試してください。

$ pip install --root=/alternative/prefix/path package_name

0

ドキュメントに従って、〜/ .pip / pip.confファイルを作成することをお勧めします。ドキュメントでは、指定されたヘッダーディレクトリが欠落しているため、次のエラーが発生することに注意してください。

error: install-base or install-platbase supplied, but installation scheme is incomplete

confファイルの完全な作業内容は次のとおりです。

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data

残念ながらインストールできますが、pipをアンインストールしようとすると、アンインストールプロセスにそのようなパッケージはないというメッセージが表示されます。


0

pip install /path/to/package/

今可能です。

これと-eor --editableフラグを使用する場合の違い-eは、パッケージをpythonパスにインストールするのではなく、パッケージが保存されている場所(つまり、ダウンロードフォルダー)にリンクすることです。

つまり、パッケージを削除/別のフォルダーに移動すると、そのパッケージを使用できなくなります。


これは質問の答えにはなりません
Clintm

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