Pythonインストール(UNIXサーバー)にあるPythonモジュールのリストを取得したいと思います。
コンピューターにインストールされているPythonモジュールのリストを取得するにはどうすればよいですか?
help('modules')
Pythonシェル/プロンプトで。
pip freeze
Pythonスクリプトから-likeリストを取得するための私の50セント:
import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
(長すぎる)1つのライナーとして:
sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
与える:
['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24',
'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3',
'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1',
'werkzeug==0.9.4']
このソリューションは、システムスコープまたは仮想環境スコープに適用され、、、および(god forbid)によってインストールされたパッケージを対象とsetuptools
しpip
ていますeasy_install
。
この呼び出しの結果をフラスコサーバーに追加したので、で呼び出すとhttp://example.com/exampleServer/environment
、サーバーのvirtualenvにインストールされているパッケージのリストが表示されます。これにより、デバッグが非常に簡単になります。
この手法の奇妙な動作に気づきました。Pythonインタープリターがファイルと同じディレクトリで呼び出されると、setup.py
によってインストールされたパッケージが一覧表示されませんsetup.py
。
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $
gitリポジトリのクローンを作成しますsetup.py
(test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.
私たちはで行動setup.py
しています/tmp/behave
:
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
gitリポジトリからpythonパッケージをインストールします
(test_env) $ cd /tmp/behave && pip install .
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1
/tmp
>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'
/tmp/behave
>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'
behave==1.2.5a1
作業ディレクトリにbehave
のsetup.py
ファイルが含まれているため、2番目の例にはありません。
ドキュメントにこの問題への参照が見つかりませんでした。おそらく私はそれのためにバグを開くでしょう。
今、私はこれらの方法を自分で試しました、そして私は宣伝されたものを正確に手に入れました:すべてのモジュール。
悲しいかな、本当にあなたはstdlibについてあまり気にしません、あなたはあなたがpythonインストールで何を得るかを知っています。
本当に、インストールしたものが欲しいです。
実際、驚くべきことに、うまく機能したのは次のとおりです。
pip freeze
戻ってきた:
Fabric==0.9.3
apache-libcloud==0.4.0
bzr==2.3b4
distribute==0.6.14
docutils==0.7
greenlet==0.3.1
ipython==0.10.1
iterpipes==0.4
libxml2-python==2.6.21
パッケージインストールツールは、「freeze」という名前ではありませんが、この機能が見つかると予想される正確な場所であるため、「驚くべきことに」と言いますが、Pythonパッケージは非常に奇妙で、このツールが理にかなっていることに驚いています。Pip 0.8.2、Python2.7。
pipバージョン1.3以降、次の機能にアクセスできます。
pip list
これは「ピップフリーズ」の糖衣構文のようです。インストールまたはvirtualenvに固有のすべてのモジュールが、バージョン番号とともに一覧表示されます。残念ながら、モジュールの現在のバージョン番号は表示されません。また、食器を洗ったり、靴を磨いたりすることもありません。
「 」ipython
と入力できますimport
Tab。
標準のPythonインタープリターでは、「」と入力できますhelp('modules')
。
コマンドラインでは、を使用できます。pydoc
modules
スクリプトで、を呼び出しますpkgutil.iter_modules()
。
これを使用して、現在使用されているモジュールを確認します。
import sys as s
s.modules.keys()
これは、Pythonで実行されているすべてのモジュールを示しています。
すべての組み込みモジュールには、以下を使用します。
s.modules
これは、すべてのモジュールとインポートオブジェクトを含むdictです。
通常のシェルでは、
pydoc modules
ピップ10の時点で、受け入れられた回答は機能しなくなります。開発チームは、get_installed_distributions
ルーチンへのアクセスを削除しました。setuptools
同じことを行うための代替機能がにあります。これは、pip10で動作する代替バージョンです。
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
以前のバージョンのpipでも機能するかどうかを教えてください。
インストールされているパッケージをPythonシェルに一覧表示する必要がある場合は、次のhelp
コマンドを使用できます
>>> help('modules package')
PythonエディターまたはIPythonで次を実行します。
import pkg_resources
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)
他の回答を読んで、このコンボをまとめてください。これは、Python内で最も速くて簡単です。
便利なことに、あなたはあなたの口述から簡単にアイテムを得ることができます、すなわち
installed_packages['pandas']
>> '1.16.4'
!pip list
そこで作業している場合はjupyterノートブック内で実行され、「クイックチェック」を簡素化します。grep(インストールしている場合)などの他のユーティリティと組み合わせると
pip list | grep pandas
、たとえば現在のパンダバージョンが取得されます。
私は通常pip list
、パッケージのリスト(バージョン付き)を取得するために使用します。
もちろん、これは仮想環境でも機能します。仮想環境(グローバルパッケージではない)にのみインストールされているものを表示するには、を使用しますpip list --local
。
pip list
これは、いくつかの良い例とともに、利用可能なすべてのオプションを示すドキュメントです。
ターミナルまたはIPythonで、次のように入力します。
help('modules')
それから
In [1]: import #import press-TAB
Display all 631 possibilities? (y or n)
ANSI audiodev markupbase
AptUrl audioop markupsafe
ArgImagePlugin avahi marshal
BaseHTTPServer axi math
Bastion base64 md5
BdfFontFile bdb mhlib
BmpImagePlugin binascii mimetools
BufrStubImagePlugin binhex mimetypes
CDDB bisect mimify
CDROM bonobo mmap
CGIHTTPServer brlapi mmkeys
Canvas bsddb modulefinder
CommandNotFound butterfly multifile
ConfigParser bz2 multiprocessing
ContainerIO cPickle musicbrainz2
Cookie cProfile mutagen
Crypto cStringIO mutex
CurImagePlugin cairo mx
DLFCN calendar netrc
DcxImagePlugin cdrom new
Dialog cgi nis
DiscID cgitb nntplib
DistUpgrade checkbox ntpath
これらを試してください
pip list
また
pip freeze
pkgutil.iter_modulesを使用した非常に簡単な検索
from pkgutil import iter_modules
a=iter_modules()
while True:
try: x=a.next()
except: break
if 'searchstr' in x[1]: print x[1]
Windowsでは、これをcmdに入力します
c:\python\libs>python -m pip freeze
OSXにカスタムインストールされたpython2.7に遭遇しました。インストールされているモジュールを一覧表示するには、X11が必要でした(ヘルプとpydocの両方を使用)。
X11をインストールせずにすべてのモジュールを一覧表示できるようにするには、pydocをhttp-serverとして実行しました。
pydoc -p 12345
次に、Safariにhttp://localhost:12345/
すべてのモジュールを表示するように指示することができます。
警告:Adam Matanは、pip>10.0でのこの使用を推奨していません。また、以下の@sinorocのコメントを読んでください
これは、アダム・マタンの答え(受け入れられたもの)に触発されました:
import tabulate
try:
from pip import get_installed_distributions
except:
from pip._internal.utils.misc import get_installed_distributions
tabpackages = []
for _, package in sorted([('%s %s' % (i.location, i.key), i) for i in get_installed_distributions()]):
tabpackages.append([package.location, package.key, package.version])
print(tabulate.tabulate(tabpackages))
次に、次の形式でテーブルを出力します。
19:33 pi@rpi-v3 [iot-wifi-2] ~/python$ python installed_packages.py
------------------------------------------- -------------- ------
/home/pi/.local/lib/python2.7/site-packages enum-compat 0.0.2
/home/pi/.local/lib/python2.7/site-packages enum34 1.1.6
/home/pi/.local/lib/python2.7/site-packages pexpect 4.2.1
/home/pi/.local/lib/python2.7/site-packages ptyprocess 0.5.2
/home/pi/.local/lib/python2.7/site-packages pygatt 3.2.0
/home/pi/.local/lib/python2.7/site-packages pyserial 3.4
/usr/local/lib/python2.7/dist-packages bluepy 1.1.1
/usr/local/lib/python2.7/dist-packages click 6.7
/usr/local/lib/python2.7/dist-packages click-datetime 0.2
/usr/local/lib/python2.7/dist-packages construct 2.8.21
/usr/local/lib/python2.7/dist-packages pyaudio 0.2.11
/usr/local/lib/python2.7/dist-packages tabulate 0.8.2
------------------------------------------- -------------- ------
これにより、インストールしたパッケージとインストールしていないパッケージを簡単に識別できますsudo
。
注意:パケットを経由してインストールする場合としない場合に一度インストールするsudo
と、一方が優先され、もう一方がリストされないことに気付きました(1つの場所のみが表示されます)。ローカルディレクトリにあるものだけがリストされていると思います。これは改善される可能性があります。
importlib
このソリューションは主にモジュールに基づいてpkgutil
おり、CPython3.4およびCPython3.5で動作しますが、CPython2はサポートされていません。
説明
sys.builtin_module_names
-すべての組み込みモジュールに名前を付けます(ここで私の答えを見てください)pkgutil.iter_modules()
-使用可能なすべてのモジュールに関する情報を返しますimportlib.util.find_spec()
-存在する場合、モジュールのインポートに関する情報を返しますBuiltinImporter
-組み込みモジュールのインポーター(ドキュメント)SourceFileLoader
-標準のPythonモジュールのインポーター(デフォルトでは拡張子は* .py)(docs)ExtensionFileLoader
-共有ライブラリとしてのモジュールのインポーター(CまたはC ++で記述)完全なコード
import sys
import os
import shutil
import pkgutil
import importlib
import collections
if sys.version_info.major == 2:
raise NotImplementedError('CPython 2 is not supported yet')
def main():
# name this file (module)
this_module_name = os.path.basename(__file__).rsplit('.')[0]
# dict for loaders with their modules
loaders = collections.OrderedDict()
# names`s of build-in modules
for module_name in sys.builtin_module_names:
# find an information about a module by name
module = importlib.util.find_spec(module_name)
# add a key about a loader in the dict, if not exists yet
if module.loader not in loaders:
loaders[module.loader] = []
# add a name and a location about imported module in the dict
loaders[module.loader].append((module.name, module.origin))
# all available non-build-in modules
for module_name in pkgutil.iter_modules():
# ignore this module
if this_module_name == module_name[1]:
continue
# find an information about a module by name
module = importlib.util.find_spec(module_name[1])
# add a key about a loader in the dict, if not exists yet
loader = type(module.loader)
if loader not in loaders:
loaders[loader] = []
# add a name and a location about imported module in the dict
loaders[loader].append((module.name, module.origin))
# pretty print
line = '-' * shutil.get_terminal_size().columns
for loader, modules in loaders.items():
print('{0}\n{1}: {2}\n{0}'.format(line, len(modules), loader))
for module in modules:
print('{0:30} | {1}'.format(module[0], module[1]))
if __name__ == '__main__':
main()
使用法
CPython3.5の場合(切り捨て)
$ python3.5 python_modules_info.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
30: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast | built-in
_codecs | built-in
_collections | built-in
_functools | built-in
_imp | None
_io | built-in
_locale | built-in
_operator | built-in
_signal | built-in
_sre | built-in
_stat | built-in
_string | built-in
_symtable | built-in
_thread | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
227: <class '_frozen_importlib_external.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__ | /usr/local/lib/python3.5/__future__.py
_bootlocale | /usr/local/lib/python3.5/_bootlocale.py
_collections_abc | /usr/local/lib/python3.5/_collections_abc.py
_compat_pickle | /usr/local/lib/python3.5/_compat_pickle.py
_compression | /usr/local/lib/python3.5/_compression.py
_dummy_thread | /usr/local/lib/python3.5/_dummy_thread.py
_markupbase | /usr/local/lib/python3.5/_markupbase.py
_osx_support | /usr/local/lib/python3.5/_osx_support.py
_pydecimal | /usr/local/lib/python3.5/_pydecimal.py
_pyio | /usr/local/lib/python3.5/_pyio.py
_sitebuiltins | /usr/local/lib/python3.5/_sitebuiltins.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
64: <class '_frozen_importlib_external.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bisect | /usr/local/lib/python3.5/lib-dynload/_bisect.cpython-35m-x86_64-linux-gnu.so
_bz2 | /usr/local/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
_codecs_cn | /usr/local/lib/python3.5/lib-dynload/_codecs_cn.cpython-35m-x86_64-linux-gnu.so
_codecs_hk | /usr/local/lib/python3.5/lib-dynload/_codecs_hk.cpython-35m-x86_64-linux-gnu.so
_codecs_iso2022 | /usr/local/lib/python3.5/lib-dynload/_codecs_iso2022.cpython-35m-x86_64-linux-gnu.so
(****************************truncated*******************************)
CPython3.4の場合(切り捨て)
$ python3.4 python_modules_info.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
54: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast | built-in
_bisect | built-in
_codecs | built-in
_collections | built-in
_datetime | built-in
_elementtree | built-in
_functools | built-in
_heapq | built-in
_imp | None
_io | built-in
_locale | built-in
_md5 | built-in
_operator | built-in
_pickle | built-in
_posixsubprocess | built-in
_random | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
246: <class '_frozen_importlib.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__ | /usr/lib/python3.4/__future__.py
_bootlocale | /usr/lib/python3.4/_bootlocale.py
_collections_abc | /usr/lib/python3.4/_collections_abc.py
_compat_pickle | /usr/lib/python3.4/_compat_pickle.py
_dummy_thread | /usr/lib/python3.4/_dummy_thread.py
_markupbase | /usr/lib/python3.4/_markupbase.py
_osx_support | /usr/lib/python3.4/_osx_support.py
_pyio | /usr/lib/python3.4/_pyio.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
44: <class '_frozen_importlib.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bz2 | /usr/lib/python3.4/lib-dynload/_bz2.cpython-34m-x86_64-linux-gnu.so
_codecs_cn | /usr/lib/python3.4/lib-dynload/_codecs_cn.cpython-34m-x86_64-linux-gnu.so
_codecs_hk | /usr/lib/python3.4/lib-dynload/_codecs_hk.cpython-34m-x86_64-linux-gnu.so
_codecs_iso2022 | /usr/lib/python3.4/lib-dynload/_codecs_iso2022.cpython-34m-x86_64-linux-gnu.so
_codecs_jp | /usr/lib/python3.4/lib-dynload/_codecs_jp.cpython-34m-x86_64-linux-gnu.so
_codecs_kr | /usr/lib/python3.4/lib-dynload/_codecs_kr.cpython-34m-x86_64-linux-gnu.so
_codecs_tw | /usr/lib/python3.4/lib-dynload/_codecs_tw.cpython-34m-x86_64-linux-gnu.so
_crypt | /usr/lib/python3.4/lib-dynload/_crypt.cpython-34m-x86_64-linux-gnu.so
(****************************truncated*******************************)
使用する以外に、私は仮想環境に卵黄pip freeze
をインストールしています。
sys.modules
pip
ます)、pip.get_installed_distributions()
2番目の目的のために、サンプルコード:
import pip
for package in pip.get_installed_distributions():
name = package.project_name # SQLAlchemy, Django, Flask-OAuthlib
key = package.key # sqlalchemy, django, flask-oauthlib
module_name = package._get_metadata("top_level.txt") # sqlalchemy, django, flask_oauthlib
location = package.location # virtualenv lib directory etc.
version = package.version # version number
猫の皮を剥ぐ方法はたくさんあります。
最も簡単な方法はpydoc
、シェルから直接関数を使用することです。
pydoc modules
ただし、詳細については、インストール日も通知するpip-dateというツールを使用してください。
pip install pip-date
pipfreezeはすべてのパッケージの検索を行いますが、次のコマンドを記述して、Pythonパッケージが存在するすべてのパスを一覧表示できます。
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
多くのアイデアがありますが、最初はこれら2つについて考えています。
ピップ
短所:常にインストールされているわけではありません
help('modules')
短所:コンソールへの出力。モジュールが壊れていると(ubuntu ...を参照)、セグメンテーション違反が発生する可能性があります
基本的なライブラリを使用し、古いpython2.xと互換性のある簡単なアプローチが必要です
そして私は光を見る:listmodules.py
2.5のドキュメントソースディレクトリに隠されているのは、Pythonインストールで利用可能なすべてのモジュールを一覧表示する小さなスクリプトです。
長所:
imp、sys、os、re、timeのみを使用します
Python1.5.2以降で実行するように設計されています
ソースコードは非常にコンパクトなので、たとえばバグのあるモジュールの例外リストを渡すなど、簡単にいじくり回すことができます(インポートしようとしないでください)。
AWSLambdaでデフォルトで利用可能なパッケージの特定のバージョンを見つける必要がありました。私はこのページからのアイデアのマッシュアップでそうしました。後世のために共有しています。
import pkgutil
__version__ = '0.1.1'
def get_ver(name):
try:
return str(__import__(name).__version__)
except:
return None
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': [{
'path': m.module_finder.path,
'name': m.name,
'version': get_ver(m.name),
} for m in list(pkgutil.iter_modules())
#if m.module_finder.path == "/var/runtime" # Uncomment this if you only care about a certain path
],
}
私が発見したのは、提供されたboto3ライブラリがかなり古くなっていて、コードが失敗したのは私のせいではなかったということです。プロジェクトにboto3とbotocoreを追加する必要がありました。しかし、これがなければ、コードが悪いと思って頭を悩ませていたでしょう。
{
"statusCode": 200,
"body": [
{
"path": "/var/task",
"name": "lambda_function",
"version": "0.1.1"
},
{
"path": "/var/runtime",
"name": "bootstrap",
"version": null
},
{
"path": "/var/runtime",
"name": "boto3",
"version": "1.9.42"
},
{
"path": "/var/runtime",
"name": "botocore",
"version": "1.12.42"
},
{
"path": "/var/runtime",
"name": "dateutil",
"version": "2.7.5"
},
{
"path": "/var/runtime",
"name": "docutils",
"version": "0.14"
},
{
"path": "/var/runtime",
"name": "jmespath",
"version": "0.9.3"
},
{
"path": "/var/runtime",
"name": "lambda_runtime_client",
"version": null
},
{
"path": "/var/runtime",
"name": "lambda_runtime_exception",
"version": null
},
{
"path": "/var/runtime",
"name": "lambda_runtime_marshaller",
"version": null
},
{
"path": "/var/runtime",
"name": "s3transfer",
"version": "0.1.13"
},
{
"path": "/var/runtime",
"name": "six",
"version": "1.11.0"
},
{
"path": "/var/runtime",
"name": "test_bootstrap",
"version": null
},
{
"path": "/var/runtime",
"name": "test_lambda_runtime_client",
"version": null
},
{
"path": "/var/runtime",
"name": "test_lambda_runtime_marshaller",
"version": null
},
{
"path": "/var/runtime",
"name": "urllib3",
"version": "1.24.1"
},
{
"path": "/var/lang/lib/python3.7",
"name": "__future__",
"version": null
},
...
私が発見したことも、彼らが公式に発表したものとは異なっていました。これを書いている時点で:
- オペレーティングシステム– Amazon Linux
- AMI – amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
- Linuxカーネル– 4.14.77-70.59.amzn1.x86_64
- AWS SDK for JavaScript – 2.290.0 \
- SDK for Python(Boto 3)– 3-1.7.74 botocore-1.10.74
これは、インストールされているモジュールのリストを返すPythonコードソリューションです。コードを簡単に変更して、バージョン番号を含めることができます。
import subprocess
import sys
from pprint import pprint
installed_packages = reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze']).decode('utf-8')
installed_packages = installed_packages.split('\r\n')
installed_packages = [pkg.split('==')[0] for pkg in installed_packages if pkg != '']
pprint(installed_packages)
インストール
pip install pkgutil
コード
import pkgutil
for i in pkgutil.iter_modules(None): # returns a tuple (path, package_name, ispkg_flag)
print(i[1]) #or you can append it to a list
サンプル出力:
multiprocessing
netrc
nntplib
ntpath
nturl2path
numbers
opcode
pickle
pickletools
pipes
pkgutil
pip install pip-chill
pip-chill
上記のいずれも役に立たない場合は、私の環境でシステムのアップグレードが壊れており、pipをアップグレードできませんでした。正確なリストは表示されませんが、env> lib> python(バージョンはこちら)> site-packages>を調べるだけで、どのライブラリがインストールされているかを知ることができます。ここでは、モジュールがインストールされていることがわかります。
Pythonプログラムから呼び出す方法がわからないpip list
場合は、次を使用できます。
import pip
pip.main(['list]) # this will print all the packages
シェルから
ls site-packages
それが役に立たない場合は、これを行うことができます。
import sys
import os
for p in sys.path:
print os.listdir( p )
そして、それが何を生み出すかを見てください。