1207

site-packages ディレクトリの場所を見つけるにはどうすればよいですか?

4

22 に答える 22

687
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

(または を含む最初のアイテムのみsite.getsitepackages()[0])

于 2012-10-18T08:19:45.187 に答える
351

次のようなソリューション:

  • virtualenv の外部 -グローバルサイト パッケージのパスを提供します。
  • virtualenv 内 - virtualenv のサイトパッケージを提供します

...これはワンライナーです:

python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"

(ワンライナーとして使用するのではなく) 読みやすくするために書式設定すると、次のようになります。

from distutils.sysconfig import get_python_lib
print(get_python_lib())


ソース: 「Django のインストール方法」ドキュメントの非常に古いバージョン(ただし、これは Django のインストール以外にも役立ちます)

于 2008-09-23T17:06:59.080 に答える
106

Ubuntuの場合、

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

...正しくありません。

それはあなたを指し示します/usr/lib/pythonX.X/dist-packages

このフォルダには、プログラムを実行するためにオペレーティングシステムが自動的にインストールしたパッケージのみが含まれます。

ubuntuでは、setup_tools \ easy_install\pipを介してインストールされたパッケージを含むsite-packagesフォルダーが次の場所にあります。/usr/local/lib/pythonX.X/dist-packages

ユースケースがインストールまたはソースコードの読み取りに関連している場合は、2番目のフォルダーの方がおそらく便利です。

Ubuntuを使用しない場合は、最初のコードボックスをターミナルにコピーして貼り付けるのが安全です。

于 2011-01-06T03:08:09.357 に答える
75

これは私のために働いたものです:

python -m site --user-site
于 2012-05-22T00:08:55.807 に答える
34

パッケージ「django」をインストールしたとしましょう。それをインポートして、dir(django) と入力します。そのモジュールのすべての機能と属性が表示されます。Python インタープリターを入力します -

>>> import django
>>> dir(django)
['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_version']
>>> print django.__path__
['/Library/Python/2.6/site-packages/django']

Mercurial がインストールされていれば、同じことができます。

これはスノーレパード用です。しかし、それは一般的にも機能するはずだと思います。

于 2011-02-23T18:32:10.357 に答える
25

他の人が指摘したようにdistutils.sysconfig、関連する設定があります:

import distutils.sysconfig
print distutils.sysconfig.get_python_lib()

...ただし、デフォルトでsite.pyは、以下に言い換えると、もう少し粗雑な処理が行われます。

import sys, os
print os.sep.join([sys.prefix, 'lib', 'python' + sys.version[:3], 'site-packages'])

(定数が異なる場合は、${sys.prefix}/lib/site-python両方のパスも追加および追加します)。sys.exec_prefix

つまり、コンテキストは何ですか?site-packages直接いじってはいけません。インストールには setuptools/distutils が機能し、プログラムは pythonpath が完全にユーザー ローカルである virtualenv で実行されている可能性があるため、システムのサイト パッケージを直接使用することも想定しないでください。

于 2008-09-23T17:14:02.557 に答える
23

Debian ベースのシステムに Python インストールでインストールされるネイティブ システム パッケージは、次の場所にあります。

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

OSXで -/Library/Python/2.7/site-packages

この小さなコードを使用して:

from distutils.sysconfig import get_python_lib
print get_python_lib()

ただし、経由でインストールされたパッケージのリストは次の場所にありますpip

/usr/ローカル/ビン/

または、次のコマンドを単純に記述して、python パッケージが存在するすべてのパスを一覧表示することもできます。

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

注: OSX のように、場所は OS によって異なる場合があります。

>>> import site; site.getsitepackages()
['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python', '/Library/Python/2.7/site-packages']
于 2013-08-08T16:05:17.297 に答える
14

すべての回答 (または同じ回答が何度も繰り返される) は不適切です。あなたがしたいことはこれです:

from setuptools.command.easy_install import easy_install
class easy_install_default(easy_install):
  """ class easy_install had problems with the fist parameter not being
      an instance of Distribution, even though it was. This is due to
      some import-related mess.
      """

  def __init__(self):
    from distutils.dist import Distribution
    dist = Distribution()
    self.distribution = dist
    self.initialize_options()
    self._dry_run = None
    self.verbose = dist.verbose
    self.force = None
    self.help = 0
    self.finalized = 0

e = easy_install_default()
import distutils.errors
try:
  e.finalize_options()
except distutils.errors.DistutilsError:
  pass

print e.install_dir

最後の行には、インストール ディレクトリが表示されます。Ubuntu では動作しますが、上記のものは動作しません。Windows やその他の dist については聞かないでください。ただし、easy_install がデフォルトで使用するのとまったく同じディレクトリであるため、easy_install が機能する場所ならどこでも (つまり、どこでも、Mac でさえも) 正しいと思われます。楽しむ。注: 元のコードには多くの悪口が含まれています。

于 2012-02-06T02:40:22.307 に答える
14

補足: 提案された解決策 ( distutils.sysconfig.get_python_lib()) は、複数の site-packages ディレクトリがある場合には機能しません (この記事で推奨されているように)。メインのサイト パッケージ ディレクトリのみが返されます。

残念ながら、私にもこれ以上の解決策はありません。Python は site-packages ディレクトリを追跡しておらず、その中のパッケージだけを追跡しているようです。

于 2009-11-10T22:49:28.780 に答える
13

これは、「ローテク」な性質のため、仮想環境内外のすべてのディストリビューションで機能するはずです。os モジュールは常に「site-packages」の親ディレクトリに存在します

import os; print(os.path.dirname(os.__file__) + '/site-packages')

dir を site-packages dir に変更するには、次のエイリアスを使用します (*nix システム上):

alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'
于 2015-03-15T15:43:40.320 に答える
13

これは私にとってはうまくいきます。dist-packages フォルダーと site-packages フォルダーの両方を取得します。フォルダーが Python のパス上にない場合、いずれにせよあまり効果がありません。

import sys; 
print [f for f in sys.path if f.endswith('packages')]

出力 (Ubuntu インストール):

['/home/username/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages']
于 2012-03-30T16:01:24.873 に答える
12

すでに述べた関数への追加の注意get_python_lib: 一部のプラットフォームでは、プラットフォーム固有のモジュール (例: コンパイルが必要なモジュール) に異なるディレクトリが使用されます。関数に渡すplat_specific=Trueと、プラットフォーム固有のパッケージのサイト パッケージが取得されます。

于 2008-09-23T17:16:22.833 に答える
10
from distutils.sysconfig import get_python_lib
print get_python_lib()
于 2008-09-23T17:09:54.563 に答える
4

古い質問に答えます。ただし、これには ipython を使用します。

pip install ipython
ipython 
import imaplib
imaplib?

これにより、imaplib パッケージに関する次の出力が得られます -

Type:        module
String form: <module 'imaplib' from '/usr/lib/python2.7/imaplib.py'>
File:        /usr/lib/python2.7/imaplib.py
Docstring:  
IMAP4 client.

Based on RFC 2060.

Public class:           IMAP4
Public variable:        Debug
Public functions:       Internaldate2tuple
                        Int2AP
                        ParseFlags
                        Time2Internaldate
于 2016-07-18T09:12:47.957 に答える