Site-packagesディレクトリの場所を見つけるにはどうすればいいですか?
サイトパッケージディレクトリには、globalとper userの2種類があります。
グローバル site-packages( " dist-packages ")ディレクトリは、実行時にsys.path
に表示されます。
python -m site
より簡潔なリストを得るには、Pythonコードの siteモジュール からgetsitepackages
を実行してください。
python -c "import site; print(site.getsitepackages())"
注: virtualenvs getsitepackagesが利用できない の場合、上のsys.path
はvirtualenvのsite-packagesディレクトリを正しくリストします。
ユーザごとの site-packagesディレクトリ( PEP 370 )は、Pythonがローカルパッケージをインストールする場所です。
python -m site --user-site
これが存在しないディレクトリを指している場合は、Pythonの終了ステータスを確認し、説明についてはpython -m site --help
を参照してください。
ヒント:pip list --user
またはpip freeze --user
を実行すると、インストールされているすべてのuser site-packagesの一覧が表示されます。
<package>.__path__
を使用すると、特定のパッケージの場所を特定できます。( details )
$ python -c "import setuptools as _; print(_.__path__)"
['/usr/lib/python2.7/dist-packages/setuptools']
<module>.__file__
を使用すると、特定のモジュールの場所を特定できます。( difference )
$ python3 -c "import os as _; print(_.__file__)"
/usr/lib/python3.6/os.py
Debianスタイルのパッケージ情報を表示するには、pip show <package>
を実行します。
$ pip show pytest
Name: pytest
Version: 3.8.2
Summary: pytest: simple powerful testing with Python
Home-page: https://docs.pytest.org/en/latest/
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others
Author-email: None
License: MIT license
Location: /home/peter/.local/lib/python3.4/site-packages
Requires: more-itertools, atomicwrites, setuptools, attrs, pathlib2, six, py, pluggy
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
(またはsite.getsitepackages()[0]
の付いた最初の項目のみ)
"How to Install Django"ドキュメント (これはDjangoをインストールするだけではありませんが) - 以下のコマンドをシェルから実行してください。
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
読みやすくするためにフォーマットされています(ワンライナーとして使用するのではなく)。これは次のようになります。
from distutils.sysconfig import get_python_lib
print(get_python_lib())
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をインストールした場合も同じことができます。
これはSnow Leopard用です。しかし、私はそれが一般的にもうまくいくはずだと思います。
他の人が指摘したように、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で走っているかもしれないので、それは直接システムsite-packagesの使用も想定するべきではありません。
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/local/bin /
あるいは、以下のコマンドを書くだけで、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や他のものについて私に聞かないでください、それはeasy_installがデフォルトで使うのとまったく同じdirなので、おそらくeasy_installが動くところならどこでも(つまり、どこでも、Macでも)正しいでしょう。楽しむ。注意:オリジナルのコードには多くの誓いがあります。
サイドノート:提案された解決策(distutils.sysconfig.get_python_lib()
)は、( この記事で推奨 のように)複数のsite-packagesディレクトリがある場合には機能しません。それはメインのsite-packagesディレクトリのみを返します。
残念ながら、私はこれ以上の解決策はありません。 Pythonは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
を渡すと、プラットフォーム固有のパッケージ用のサイトパッケージを取得します。
これは「ローテク」な性質のため、仮想環境内外のすべてのディストリビューションで機能するはずです。 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'
from distutils.sysconfig import get_python_lib
print get_python_lib()
pip showはパッケージに関する詳細をすべて表示します。 https://pip.pypa.io/en/stable/reference/pip_show/ [pip show] [1]
場所を取得するには:
pip show <package_name>| grep Location
最新のstdlibの方法は sysconfig
モジュールを使うことで、これはバージョン2.7と3.2+で利用可能です。 Pythonは現在eightpaths( docs )を使用しています。
- stdlib:プラットフォーム固有ではない標準Pythonライブラリファイルを含むディレクトリ。
- platstdlib:プラットフォーム固有の標準Pythonライブラリファイルを含むディレクトリ。
- platlib:サイト固有、プラットフォーム固有のファイル用のディレクトリ。
- purelib:サイト固有の、プラットフォーム固有ではないファイル用のディレクトリー。
- include:プラットフォーム固有ではないヘッダーファイル用のディレクトリ。
- platinclude:プラットフォーム固有のヘッダファイル用のディレクトリ。
- scripts:スクリプトファイル用のディレクトリ。
- data:データファイル用のディレクトリ。
ほとんどの場合、この質問を見つけたユーザーは 'purelib'パスに興味があるでしょう( 一部のケースでは 'platlib'にも興味があるかもしれません)。現在受け入れられている答えとは異なり、このメソッドはあなたがvirtualenvをアクティブにしているかどうかに依存して誤動作してはいけません。
システムレベル(これはMac OS上のPython 3.7.0です):
>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'
Venvを使えば、このようなものが手に入るでしょう
>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/private/tmp/.venv/lib/python3.7/site-packages'
これらの詳細を表示するためのシェルスクリプトも利用可能です。モジュールとしてsysconfig
を実行することで呼び出すことができます。
python -m sysconfig
注:sysconfig
( source )は、他のいくつかの回答で言及されているdistutils.sysconfig
サブモジュール( source )と混同しないようにしてください。上記のget_paths
関数が欠けています。
古い質問への回答しかし、これには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
私が取り組んでいたプロジェクトでは、少し違ったことをしなければなりませんでした: relative site-packagesディレクトリをベースインストールプレフィックスからの相対パスで探します。 site-packagesフォルダーが/usr/lib/python2.7/site-packages
にある場合は、/lib/python2.7/site-packages
部分が欲しいと思いました。実際、私はsite-packages
が/usr/lib64
にあるシステムに遭遇しました、そして、受け入れられた答えはそれらのシステムでうまくいきませんでした。
詐欺師の答えと同様に、私の解決策は実際にはsetup.py
の中を通り過ぎるパスを見つけるために、Distutilsの奥深くを覗いています。私は誰もこれを二度と考え出す必要がないようにするのを理解するのはとても苦痛でした。
import sys
import os
from distutils.command.install import INSTALL_SCHEMES
if os.name == 'nt':
scheme_key = 'nt'
else:
scheme_key = 'unix_prefix'
print(INSTALL_SCHEMES[scheme_key]['purelib'].replace('$py_version_short', (str.split(sys.version))[0][0:3]).replace('$base', ''))
/Lib/site-packages
や/lib/python3.6/site-packages
のようなものが表示されるはずです。
それが既にPYTHONPATH
に追加されている場合は、次のようにすることもできます。
import sys
print('\n'.join(sys.path))
このコマンドを試して、pipのインストール場所を確認してください。
Python 2
pip show six | grep "Location:" | cut -d " " -f2
Python 3
pip3 show six | grep "Location:" | cut -d " " -f2