2012-03-26 20 views
2

私が使用しているサーバーの管理者は、Pythonモジュールを非常に古く残す傾向があり、この人がグローバルディレクトリを更新するのを待つ時間がないことがわかりました。モジュールをPython標準ライブラリからローカルディレクトリにインストールする標準的な方法は何ですか?

sys.pathを手動で変更することなく、ローカルのPythonモジュールをグローバルライブラリよりも優先させる方法はありますか?

答えて

4

さまざまなオプションがあります。 Python 2.6以降を使用している場合は、PythonのDistutilsでサポートされているuser installation schemeを使用して、ホームディレクトリにPythonモジュールをインストールできます。リンクに記載されているように、setup.py installコマンドに--userを追加するだけです。別の一般的なオプションは、サードパーティのvirtualenvパッケージを使用して、1つ以上の独立したローカルPython環境を作成することです。

更新:user installation schemeの場合、ユーザーのsite-packagesディレクトリのチェックはPythonの起動時に行われます。ディレクトリが存在する場合は、system site-packagesディレクトリの前にsys.pathに追加されます。たとえば、Debian Linuxをインストールした場合:

$ python2.7 -c 'import site; print(site.USER_SITE)' 
/home/nad/.local/lib/python2.7/site-packages 
$ ls -l /home/nad/.local/lib/python2.7/site-packages 
ls: cannot access /home/nad/.local/lib/python2.7/site-packages: No such file or directory 
$ python2.7 -c 'import sys; print(sys.path)' 
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/pymodules/python2.7'] 
# user site-packages dir doesn't exist so it's not in sys.path 
$ mkdir -p ~/.local/lib/python2.7/site-packages 
$ python2.7 -c 'import sys; print(sys.path)' 
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/nad/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/pymodules/python2.7'] 
# now user site-packages dir exists so it is in sys.path and before /usr/lib ones 
+0

しかし、これは既にシステム上にある同じ古いグローバルパッケージよりも優先されますか? –

+0

@Nedによって与えられたリンクを読むと、それは 'userbase'を使ってそのモジュールをインストールしますので、システムのデフォルトモジュールを上書きしません。モジュールをインポートすると、 'userbase'のlibの' python'ディレクトリをチェックし、 'python'ディレクトリのシステムをチェックします。 – Nilesh

+0

いずれの方法でも、 'sys'モジュールで' sys.path'として利用可能なPythonの検索順序を使用して、ユーザディレクトリが最初に検索されるようにします。 –

関連する問題