pythonモジュールをインストールしたところです:このように setuptools
で construct
と statlib
をインストールしました:
# Install setuptools to be able to download the following
sudo apt-get install python-setuptools
# Install statlib for lightweight statistical tools
sudo easy_install statlib
# Install construct for packing/unpacking binary data
sudo easy_install construct
私は(プログラムで)それらのバージョンをチェックできるようにしたいです。 コマンドラインから実行できる python --version
と同等のものはないでしょうか?
私のpythonのバージョンは2.7.3
です。
easy_installの代わりにpipを使う](https://stackoverflow.com/a/3220572/1265154)ことをお勧めします。pipを使えば、インストールされているすべてのパッケージとそのバージョンを、次のように一覧表示することができます。
pip freeze
ほとんどの Linux システムでは、これを grep
(Windows では findstr
) にパイプすると、興味のある特定のパッケージの行を見つけることができます':
Linux:
$ pip freeze | grep lxml
lxml==2.3
Windows:
c:\> pip freeze | findstr lxml
lxml==2.3
個々のモジュールについては、__version__
属性を試すことができますが、これを持たないモジュールも存在します:
$ python -c "import requests; print(requests.__version__)"
2.14.2
$ python -c "import lxml; print(lxml.__version__)"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute '__version__'
最後に、質問のコマンドの先頭に sudo
が付いていることから、グローバルな python 環境にインストールされているようです。pythonの仮想環境マネージャー、例えばvirtualenvwrapperを参照することを強くお勧めします。
setuptools
ライブラリとともに配布される pkg_resources
モジュールを使用します。 get_distribution
メソッドに渡す文字列は、PyPIエントリに対応していることに注意してください。
>>> import pkg_resources
>>> pkg_resources.get_distribution("construct").version
'2.5.2'
コマンドラインから実行する場合は、次のことができます。
python -c "import pkg_resources; print(pkg_resources.get_distribution('construct').version)"
get_distribution
メソッドに渡す文字列は、インポートしようとしているモジュール名ではなく、PyPIに登録されているパッケージ名である必要があることに注意してください。
残念ながら、これらは常に同じであるとは限りません(例:. pip install memcached
を実行しますが、 import memcache
)を実行します。
それを行うためのより良い方法は次のとおりです。
-----------------。
特定のパッケージの詳細について。
pip show< package_name>
。
Package_name、バージョン、作成者、場所などを詳しく説明します。
------------。
$ pip show numpy
Name: numpy
Version: 1.13.3
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: [email protected]
License: BSD
Location: c:\users\prowinjvm\appdata\local\programs\python\python36\lib\site-packages
Requires:
----------。
< b>詳細:< / b> `>>> pip help`。pip install --upgrade pip
Windowsでは、コマンドを推奨します。
python -m pip install --upgrade pip
----------。
module.__version__
は最初に試すのに良いことですが、常に機能するとは限りません。
シェルアウトしたくない場合でも、pip 8または9を使用している場合は、 pip.get_installed_distributions()
を使用して、Python内からバージョンを取得できます。
update: ここでのソリューションはpip 8と9で機能しますが、pip 10では、関数が「pip.get_installed_distributions」から「pip._internal.utils.misc.get_installed_distributions」に移動されて、外部での使用ではありません。 pip 10+を使用している場合は、それを信頼することはお勧めできません。。
<。!-language-all:lang-python -->。
import pip
pip.get_installed_distributions() # -> [distribute 0.6.16 (...), ...]
[
pkg.key + ': ' + pkg.version
for pkg in pip.get_installed_distributions()
if pkg.key in ['setuptools', 'statlib', 'construct']
] # -> nicely filtered list of ['setuptools: 3.3', ...]
dir()
を使用して、モジュールに`version`属性があるかどうかを確認します。
>>> import selenium
>>> dir(selenium)
['__builtins__', '__doc__', '__file__', '__name__',
'__package__', '__path__', '__version__']
>>> selenium.__version__
'3.141.0'
>>> selenium.__path__
['/venv/local/lib/python2.7/site-packages/selenium']
これには「importlib_metadata」ライブラリを使用できます。
python < 3.8
を使用している場合は、まず以下でインストールします。
。 pip install importlib_metadata。
。
python 3.8
なので、標準ライブラリに含まれています。
次に、パッケージのバージョン(この例では lxml
)を確認するには、次の操作を実行します。
``。
importlib_metadataインポートバージョンから。 バージョン( 'lxml')。 '4.3.1'。 ``。
これは、PyPIからインストールされたパッケージでのみ機能することに注意してください。また、このパッケージが提供するモジュール名ではなく、引数としてパッケージ名を「バージョン」メソッドに渡す必要があります(通常は同じです)。
上記の方法が機能しない場合は、pythonで次のことを試す価値があります。
import modulename
modulename.version
modulename.version_info
https://stackoverflow.com/questions/31146153/get-python-tornado-version/31146188を参照してください。
「.version」は、竜巻以外のいくつかの他のものでも私のために働いたことに注意してください。
(https://stackoverflow.com/a/56912280/7262247も参照)。
それらのほとんどはすべてのケースをカバーしているわけではないため、利用可能なさまざまなツール(Jakub Kukulの回答で言及されている最高の「pkg_resources」を含む)を使用することは非常に信頼できないことがわかりました。 例えば。
組み込みモジュール。 モジュールはインストールされていませんが、(たとえばIDEによって)pythonパスに追加されています。 *同じモジュールの2つのバージョンが利用可能(1つはインストールされているものに取って代わるpythonパス)。
from getversion import get_module_version
import foo
version, details = get_module_version(foo)
詳細については、ドキュメントを参照してください。
これはWindowsのJupyter Notebookでも動作します。! JupyterがGit Bash(MingW64)などのbash準拠のコマンドラインから起動される限り、多くの回答で提供されているソリューションは、1つの小さな調整を行うWindowsシステムのJupyter Notebookで使用できます。
Anaconda経由でPythonをインストールしたwindows 10 Proを実行しています。次のコードは、Git Bash経由でJupyterを起動するときに機能します(ただし、Anacondaプロンプトから起動する場合は機能しません)。
微調整:感嘆符を追加します( 。!
) pip
の前に `を作成します。!ピップ。
>>>!pip show lxml | grep Version
Version: 4.1.0
>>>!pip freeze | grep lxml
lxml==4.1.0
>>>!pip list | grep lxml
lxml 4.1.0
>>>!pip show lxml
Name: lxml
Version: 4.1.0
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
Home-page: http://lxml.de/
Author: lxml dev team
Author-email: [email protected]
License: BSD
Location: c:\users\karls\anaconda2\lib\site-packages
Requires:
Required-by: jupyter-contrib-nbextensions
現在のモジュールにインポートされた非標準(pip)モジュールのリストを取得するには:
[{pkg.key : pkg.version} for pkg in pip.get_installed_distributions()
if pkg.key in set(sys.modules) & set(globals())]
結果:
>>> import sys, pip, nltk, bs4
>>> [{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() if pkg.key in set(sys.modules) & set(globals())]
[{'pip': '9.0.1'}, {'nltk': '3.2.1'}, {'bs4': '0.0.1'}]
注:
このコードは、このページとhttps://stackoverflow.com/questions/4858100/how-to-list-imported-modulesの両方のソリューションからまとめられました。
すべてのパッケージをリストするクイックpythonプログラム(_requirements.txt_にコピーできます)。
from pip._internal.utils.misc import get_installed_distributions
print_log = ''
for module in sorted(get_installed_distributions(), key=lambda x: x.key):
print_log += module.key + '~=' + module.version + '\n'
print(print_log)
出力は次のようになります。
asn1crypto~=0.24.0
attrs~=18.2.0
automat~=0.7.0
beautifulsoup4~=4.7.1
botocore~=1.12.98
Jakub Kukulの答えに基づいて、この問題を解決するためのより信頼できる方法を見つけました。
このアプローチの主な問題は、パッケージを「従来どおり」にインストールする必要がある(「pip install --user」の使用は含まれていない)か、Python初期化のシステムPATHにあることです。
それを回避するには、 pkg_resources.find_distributions(path_to_search)
を使用できます。 これは基本的に、「path_to_search」がシステムPATHにある場合にインポート可能なディストリビューションを検索します。
このジェネレーターを次のように反復できます。
avail_modules = {}
distros = pkg_resources.find_distributions(path_to_search)
for d in distros:
avail_modules[d.key] = d.version
これにより、キーとしてモジュールがあり、値としてそれらのバージョンがある辞書が返されます。 このアプローチは、バージョン番号よりもはるかに拡張できます。
正しい方向を向いてくれたJakub Kukulに感謝します。