site-packages ディレクトリの場所を見つけるにはどうすればよいですか?
22 に答える
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
(または を含む最初のアイテムのみsite.getsitepackages()[0]
)
次のようなソリューション:
- 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 のインストール以外にも役立ちます)
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を使用しない場合は、最初のコードボックスをターミナルにコピーして貼り付けるのが安全です。
これは私のために働いたものです:
python -m site --user-site
パッケージ「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 がインストールされていれば、同じことができます。
これはスノーレパード用です。しかし、それは一般的にも機能するはずだと思います。
他の人が指摘したように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 で実行されている可能性があるため、システムのサイト パッケージを直接使用することも想定しないでください。
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']
すべての回答 (または同じ回答が何度も繰り返される) は不適切です。あなたがしたいことはこれです:
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 でさえも) 正しいと思われます。楽しむ。注: 元のコードには多くの悪口が含まれています。
補足: 提案された解決策 ( distutils.sysconfig.get_python_lib()
) は、複数の site-packages ディレクトリがある場合には機能しません (この記事で推奨されているように)。メインのサイト パッケージ ディレクトリのみが返されます。
残念ながら、私にもこれ以上の解決策はありません。Python は site-packages ディレクトリを追跡しておらず、その中のパッケージだけを追跡しているようです。
これは、「ローテク」な性質のため、仮想環境内外のすべてのディストリビューションで機能するはずです。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'
これは私にとってはうまくいきます。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']
すでに述べた関数への追加の注意get_python_lib
: 一部のプラットフォームでは、プラットフォーム固有のモジュール (例: コンパイルが必要なモジュール) に異なるディレクトリが使用されます。関数に渡すplat_specific=True
と、プラットフォーム固有のパッケージのサイト パッケージが取得されます。
from distutils.sysconfig import get_python_lib
print get_python_lib()
古い質問に答えます。ただし、これには 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