Python サイト パッケージ ディレクトリの場所を見つけるにはどうすればよいですか?
-
02-07-2019 - |
質問
サイトパッケージディレクトリの場所を見つけるにはどうすればよいですか?
解決
サイト パッケージ ディレクトリには 2 種類あります。 グローバル そして ユーザーごとの.
グローバル サイトパッケージ ("dist-パッケージ") ディレクトリは次のとおりです。
sys.path
実行するとき:python -m site
より簡潔なリストを実行するには
getsitepackages
から サイトモジュール Pythonコードでは:python -c "import site; print(site.getsitepackages())"
注記: 仮想環境を使用する getsitepackages は利用できません,
sys.path
ただし、上記の方法では、virtualenv の site-packages ディレクトリが正しくリストされます。の ユーザーごとの サイトパッケージディレクトリ (PEP370) は、Python がローカル パッケージをインストールする場所です。
python -m site --user-site
これが存在しないディレクトリを指している場合は、Python の終了ステータスを確認してください。
python -m site --help
説明用に。ヒント: ランニング
pip list --user
またはpip freeze --user
インストールされているすべてのリストが表示されます ユーザーごとの サイトパッケージ。
実践的なヒント
<package>.__path__
特定のパッケージの場所を特定できます。(詳細)$ python -c "import setuptools as _; print(_.__path__)" ['/usr/lib/python2.7/dist-packages/setuptools']
<module>.__file__
特定のモジュールの場所を特定できます。(違い)$ python3 -c "import os as _; print(_.__file__)" /usr/lib/python3.6/os.py
走る
pip show <package>
Debian スタイルのパッケージ情報を表示するには:$ 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]
)
から 「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 はインストールに機能し、プログラムは Python パスが完全にユーザーローカルである 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/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 やその他の dist については聞かないでください。しかし、これは easy_install がデフォルトで使用するディレクトリとまったく同じなので、easy_install が動作する場所であればどこでも (つまり、どこでも、Mac でも) 正しいと思われます。楽しむ。注記:元のコードには多くの悪口が含まれています。
補足:提案された解決策 (distutils.sysconfig.get_python_lib()
) は、複数の site-packages ディレクトリがある場合には機能しません ( この記事で推奨されている)。メインの site-packages ディレクトリのみが返されます。
残念ながら、これ以上の解決策はありません。Python はサイト パッケージ ディレクトリを追跡せず、そのディレクトリ内のパッケージだけを追跡しているようです。
これは私にとってはうまくいきます。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 ディレクトリに変更するには、次のエイリアスを使用します (*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()
最新の stdlib の方法では、 sysconfig
モジュール、バージョン 2.7 および 3.2+ で利用可能。Pythonは現在使用しています 八 パス (ドキュメント):
- 標準ライブラリ:プラットフォーム固有ではない標準の Python ライブラリ ファイルを含むディレクトリ。
- プラットstdlib:プラットフォーム固有の標準 Python ライブラリ ファイルを含むディレクトリ。
- プラットリブ:サイト固有、プラットフォーム固有のファイルのディレクトリ。
- ピュアリブ:サイト固有の、プラットフォーム固有ではないファイルのディレクトリ。
- 含む:プラットフォーム固有ではないヘッダー ファイルのディレクトリ。
- プラットホームを含む:プラットフォーム固有のヘッダー ファイルのディレクトリ。
- スクリプト:スクリプトファイルのディレクトリ。
- データ:データファイル用のディレクトリ。
ほとんどの場合、この質問を見つけたユーザーは、「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
(ソース) と混同しないでください。 distutils.sysconfig
サブモジュール (ソース)ここの他のいくつかの回答で言及されています。これはまったく異なるモジュールであり、 get_paths
上で説明した関数。
pip show は、パッケージに関するすべての詳細を表示します。https://pip.pypa.io/en/stable/reference/pip_show/ [ピップショー][1]
場所を取得するには:
pip show <package_name>| grep Location
古い質問への回答。ただし、これには 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
私が取り組んでいたプロジェクトでは、少し違うことをする必要がありました。を見つける 相対的 ベース インストール プレフィックスに相対的な site-packages ディレクトリ。site-packages フォルダーが次の場所にあった場合 /usr/lib/python2.7/site-packages
, 、私が欲しかったのは、 /lib/python2.7/site-packages
一部。実際、私は次のようなシステムに遭遇したことがあります。 site-packages
にいた /usr/lib64
, 、受け入れられた回答はそれらのシステムでは機能しませんでした。
詐欺師の答えと同様に、私のソリューションはDistutilsの内部を深く覗いて、実際に内部で渡されるパスを見つけます setup.py
. 。それを理解するのはとても大変だったので、もう誰にもこれを理解してほしくないのです。
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
.
pip のインストール場所を確認するには、このコマンドを試してください。
パイソン2
pip show six | grep "Location:" | cut -d " " -f2
パイソン 3
pip3 show six | grep "Location:" | cut -d " " -f2
すでに追加されている場合は、 PYTHONPATH
次のようなこともできます
import sys
print('\n'.join(sys.path))