web-dev-qa-db-ja.com

dist-packagesとsite-packagesの違いは何ですか?

pythonパッケージのインストールプロセスに少し困惑しています。具体的には、dist-packagesディレクトリとsite-packagesディレクトリにインストールされるパッケージの違いは何ですか?

222
maxm

dist-packagesはDebian固有の規則であり、Ubuntuなどの派生物にも存在します。モジュールは、Debianパッケージマネージャーからこの場所に来ると、dist-packagesにインストールされます。

/usr/lib/python2.7/dist-packages

easy_installpipはパッケージマネージャーからインストールされるため、dist-packagesも使用しますが、ここにパッケージを配置します。

/usr/local/lib/python2.7/dist-packages

Debian Python Wiki から:

サイトパッケージの代わりにdistパッケージ。 DebianパッケージからインストールされたサードパーティPythonソフトウェアは、サイトパッケージではなく、dist-packagesに入ります。これは、システムPythonと、手動でインストールする可能性のあるfrom-source Python buildとの間の競合を減らすためです。

つまり、ソースからPythonを手動でインストールすると、site-packagesディレクトリが使用されます。これにより、特にDebianとUbuntuは多くのシステムユーティリティでPythonのシステムバージョンに依存しているため、2つのインストールを別々に保つことができます。

210
jterrace

dist-packagesは、aptとその友達がインストールするdebian固有のディレクトリで、site-packagesは標準のpipディレクトリです。

この問題に対する私の解決策は、dist-packagessite-packagesへのシンボリックリンクにすることです。

for d in $(find $WORKON_HOME -type d -name dist-packages); do
  pushd $d
  cd ..
  if test -d dist-packages/__pycache__; then
    mv -v dist-packages/__pycache__/* site-packages/__pycache__/
    rmdir -v dist-packages/__pycache__
  fi
  mv -v dist-packages/* site-packages/
  rmdir -v dist-packages
  ln -sv site-packages dist-packages
  popd
done

(GNUツールを使用していない場合は、-vオプションを削除してください)。

2
sds