Câu trả lời:
Theo pip 1.3 , có một pip show
lệnh.
$ pip show Jinja2
---
Name: Jinja2
Version: 2.7.3
Location: /path/to/virtualenv/lib/python2.7/site-packages
Requires: markupsafe
Trong các phiên bản cũ hơn, pip freeze
và grep
nên làm công việc độc đáo.
$ pip freeze | grep Jinja2
Jinja2==2.7.3
save
tên.
pip show pip
để lấy thông tin phiên bản của pip, thay vì pip --version
như tôi mong đợi.
pip freeze
có lợi thế là nó hiển thị các phiên bản kiểm tra VCS có thể chỉnh sửa một cách chính xác, trong khi pip show
thì không.
Tôi vừa gửi một yêu cầu kéo trong pip với sự tăng cường Hugo Tavares nói:
(ví dụ cụ thể)
$ pip show specloud
Package: specloud
Version: 0.4.4
Requires:
nose
figleaf
pinocchio
Pip 1.3 bây giờ cũng có một lệnh danh sách :
$ pip list
argparse (1.2.1)
pip (1.5.1)
setuptools (2.1)
wsgiref (0.1.2)
pip list
là chung chung, và __version__
không. Tôi cũng đã thấy version()
và get_version()
cho một nhập khẩu.
và với --outdated như một đối số bổ sung, bạn sẽ nhận được các phiên bản Hiện tại và Mới nhất của các gói bạn đang sử dụng:
$ pip list --outdated
distribute (Current: 0.6.34 Latest: 0.7.3)
django-bootstrap3 (Current: 1.1.0 Latest: 4.3.0)
Django (Current: 1.5.4 Latest: 1.6.4)
Jinja2 (Current: 2.6 Latest: 2.8)
Vì vậy, kết hợp với câu trả lời của AdamKG:
$ pip list --outdated | grep Jinja2
Jinja2 (Current: 2.6 Latest: 2.8)
Kiểm tra pip-tools quá: https://github.com/nvie/pip-tools
Bạn cũng có thể cài đặt yolk
và sau đó chạy yolk -l
cũng cung cấp một số đầu ra tốt đẹp. Đây là những gì tôi nhận được cho virtualenv nhỏ của mình:
(venv)CWD> /space/vhosts/pyramid.xcode.com/venv/build/unittest
project@pyramid 43> yolk -l
Chameleon - 2.8.2 - active
Jinja2 - 2.6 - active
Mako - 0.7.0 - active
MarkupSafe - 0.15 - active
PasteDeploy - 1.5.0 - active
Pygments - 1.5 - active
Python - 2.7.3 - active development (/usr/lib/python2.7/lib-dynload)
SQLAlchemy - 0.7.6 - active
WebOb - 1.2b3 - active
account - 0.0 - active development (/space/vhosts/pyramid.xcode.com/project/account)
distribute - 0.6.19 - active
egenix-mx-base - 3.2.3 - active
ipython - 0.12 - active
logilab-astng - 0.23.1 - active
logilab-common - 0.57.1 - active
nose - 1.1.2 - active
pbkdf2 - 1.3 - active
pip - 1.0.2 - active
pyScss - 1.1.3 - active
pycrypto - 2.5 - active
pylint - 0.25.1 - active
pyramid-debugtoolbar - 1.0.1 - active
pyramid-tm - 0.4 - active
pyramid - 1.3 - active
repoze.lru - 0.5 - active
simplejson - 2.5.0 - active
transaction - 1.2.0 - active
translationstring - 1.1 - active
venusian - 1.0a3 - active
waitress - 0.8.1 - active
wsgiref - 0.1.2 - active development (/usr/lib/python2.7)
yolk - 0.4.3 - active
zope.deprecation - 3.5.1 - active
zope.interface - 3.8.0 - active
zope.sqlalchemy - 0.7 - active
Cách dễ nhất là đây:
import jinja2
print jinja2.__version__
__version__
trong mã nguồn của họ. Nhiều gói không.
import
và đầu ra của pip freeze
.
Ngoài ra còn có một công cụ được gọi là pip-check
cung cấp cho bạn tổng quan nhanh về tất cả các gói đã cài đặt và trạng thái cập nhật của chúng:
Không sử dụng nó cho mình; chỉ vấp phải nó và câu hỏi SO này liên tiếp, và vì nó không được đề cập ...
Hàm python chỉ trả về phiên bản gói ở định dạng máy có thể đọc được:
from importlib.metadata import version
version('numpy')
Trước trăn 3,8:
pip install importlib-metadata
from importlib_metadata import version
version('numpy')
Tương đương bash (ở đây cũng được gọi từ python) sẽ phức tạp hơn nhiều (nhưng mạnh mẽ hơn - xem cảnh báo bên dưới):
import subprocess
def get_installed_ver(pkg_name):
bash_str="pip freeze | grep -w %s= | awk -F '==' {'print $2'} | tr -d '\n'" %(pkg_name)
return(subprocess.check_output(bash_str, shell=True).decode())
Sử dụng mẫu:
# pkg_name="xgboost"
# pkg_name="Flask"
# pkg_name="Flask-Caching"
pkg_name="scikit-learn"
print(get_installed_ver(pkg_name))
>>> 0.22
Lưu ý rằng trong cả hai trường hợp, pkg_name
tham số nên chứa tên gói theo định dạng được trả về pip freeze
và không được sử dụng trong thời gian import
, ví dụ: scikit-learn
không sklearn
hoặc Flask-Caching
khôngflask_caching
.
Lưu ý rằng trong khi gọi pip freeze
phiên bản bash có vẻ không hiệu quả, chỉ có phương pháp này chứng tỏ đủ mạnh mẽ để đóng gói các đặc điểm và sự không nhất quán (ví dụ: gạch dưới so với dấu gạch ngang, chữ nhỏ so với chữ hoa lớn và chữ viết tắt như sklearn
vsscikit-learn
).
Thận trọng: trong các môi trường phức tạp, cả hai biến thể đều có thể trả về số phiên bản bất ngờ, không phù hợp với những gì bạn thực sự có thể nhận được trong thời gian import
.
Một vấn đề như vậy phát sinh khi có các phiên bản khác của gói được ẩn trong thư mục con người dùng site-packages
. Như một minh họa về sự nguy hiểm của việc sử dụng version()
đây là một tình huống tôi gặp phải:
$ pip freeze | grep lightgbm
lightgbm==2.3.1
and
$ python -c "import lightgbm; print(lightgbm.__version__)"
2.3.1
vs.
$ python -c "from importlib_metadata import version; print(version(\"lightgbm\"))"
2.2.3
until you delete the subfolder with the old version (here 2.2.3) from the user folder (only one would normally be preserved by `pip` - the one installed as last with the `--user` switch):
$ ls /home/jovyan/.local/lib/python3.7/site-packages/lightgbm*
/home/jovyan/.local/lib/python3.7/site-packages/lightgbm-2.2.3.dist-info
/home/jovyan/.local/lib/python3.7/site-packages/lightgbm-2.3.1.dist-info
Một vấn đề khác là có một số gói cài đặt conda trong cùng một môi trường. Nếu họ chia sẻ các phụ thuộc với các gói cài đặt pip của bạn và các phiên bản của các phụ thuộc này khác nhau, bạn có thể bị hạ cấp các phụ thuộc được cài đặt pip.
Để minh họa, phiên bản mới nhất numpy
có sẵn trong PyPI vào ngày 04-01-2020 là 1.18.0, trong khi đó, conda-forge
kênh của Anaconda chỉ có phiên bản 1.17.3 numpy
mới nhất. Vì vậy, khi bạn cài đặt basemap
gói với conda (dưới dạng thứ hai), cài đặt pip trước đó của bạn numpy
sẽ bị hạ cấp bởi conda xuống 1.17.3 và phiên bản 1.18.0 sẽ không khả dụng với import
chức năng. Trong trường hợp này version()
sẽ đúng và pip freeze
/ conda list
sai:
$ python -c "from importlib_metadata import version; print(version(\"numpy\"))"
1.17.3
$ python -c "import numpy; print(numpy.__version__)"
1.17.3
$ pip freeze | grep numpy
numpy==1.18.0
$ conda list | grep numpy
numpy 1.18.0 pypi_0 pypi
importlib.metadata.version('NameOfProject')
? docs.python.org/3/library/...
from importlib_metadata import version; version('Flask-Caching')
python -c "import pkg_resources; print(pkg_resources.get_distribution('lightgbm').version)"
không?
version()
vẫn trả về phiên bản sớm nhất (cũ nhất) (2.2.3). Bạn có thể sao chép kết quả này bằng cách cài đặt cả hai phiên bản với công --user
tắc, nhưng bảo quản lightgbm-2.2.3.dist-info
thư mục theo cách thủ công , để có cả hai phiên bản đó với nhau, như được liệt kê ở trên (pip thường sẽ loại bỏ nó - cho đến khi không).
Pip show hoạt động trong python 3.7:
pip show selenium
Name: selenium
Version: 4.0.0a3
Summary: Python bindings for Selenium
Home-page: https://github.com/SeleniumHQ/selenium/
Author: UNKNOWN
Author-email: UNKNOWN
License: Apache 2.0
Location: c:\python3.7\lib\site-packages\selenium-4.0.0a3-py3.7.egg
Requires: urllib3
Required-by:
Để thực hiện việc này bằng mã Python:
importlib.metadata.version
import importlib.metadata
importlib.metadata.version('beautifulsoup4')
'4.9.1'
(sử dụng importlib_metadata.version
)
!pip install importlib-metadata
import importlib_metadata
importlib_metadata.version('beautifulsoup4')
'4.9.1'
pkg_resources.Distribution
import pkg_resources
pkg_resources.get_distribution('beautifulsoup4').version
'4.9.1'
pkg_resources.get_distribution('beautifulsoup4').parsed_version
<Version('4.9.1')>
Được ghi nhận vào ý kiến của sinoroc và mirekphd .
Trong câu hỏi, nó không được đề cập đến người dùng hệ điều hành nào đang sử dụng (Windows / Linux / Mac)
Vì có một vài câu trả lời sẽ hoạt động hoàn hảo trên Mac và Linux.
Lệnh dưới đây có thể được sử dụng trong trường hợp người dùng đang cố gắng tìm phiên bản của gói python trên windows.
Trong PowerShell, sử dụng lệnh bên dưới:
pip list | findstr <PackageName>
Thí dụ:- pip list | findstr requests
Đầu ra: requests 2.18.4
show
lệnh trong pip: github.com/pypa/pip/issues/33