a

Câu hỏi Làm thế nào để kiểm tra phiên bản của mô-đun python?


Tôi vừa cài đặt các mô đun python: construct và statlib với setuptools như thế này:

# 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

Tôi muốn có thể (lập trình) kiểm tra các phiên bản của họ. Có tương đương với python --version Tôi có thể chạy từ dòng lệnh?

Phiên bản python của tôi là 2.7.3.


379
2017-11-24 20:25


gốc


có thể trùng lặp Kiểm tra phiên bản mô-đun python khi chạy - Ciro Santilli 新疆改造中心 六四事件 法轮功
Cũng thế: stackoverflow.com/questions/3524168/… - user2314737
Đối với những người quan tâm bằng giải pháp dòng lệnh, hãy sử dụng: pip list - KrisWebDev


Các câu trả lời:


Tôi đề nghị sử dụng pip thay cho easy_install. Với pip, bạn có thể liệt kê tất cả các gói đã cài đặt và các phiên bản của chúng với

pip freeze

Trong hầu hết các hệ thống Linux, bạn có thể đặt ống này vào grep để tìm hàng cho gói cụ thể mà bạn quan tâm:

$ pip freeze | grep lxml
lxml==2.3

Đối với một mô-đun riêng lẻ, bạn có thể thử __version__ thuộc tính, tuy nhiên có các mô-đun không có mô-đun:

$ 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__'

Cuối cùng, vì các lệnh trong câu hỏi của bạn được bắt đầu bằng sudo, có vẻ như bạn đang cài đặt vào môi trường python toàn cầu. Khuyến khích mạnh mẽ để nhìn vào python Môi trường ảo người quản lý, ví dụ virtualenvwrapper


390
2017-11-24 20:30



câu trả lời dưới đây được đề xuất pip show lxml | grep Version ; điều này sẽ chạy nhanh hơn nhiều, vì nó chỉ kiểm tra một gói duy nhất. - Jonathan Vanasco
Chỉ để hoàn thành: Phiên bản thứ ba là pip list | grep lxml - 0xAffe


Bạn co thể thử

>>> import statlib
>>> print statlib.__version__

>>> import construct
>>> print contruct.__version__

254
2017-11-24 20:28



Một số phiên bản của một số thư viện phổ biến (chẳng hạn như inspect) không có __version__ thuộc tính, thật không may. - ely
PySerial có serial.VERSION. Có thể có một số mô-đun thường được sử dụng khác, không theo PEP 0396: python.org/dev/peps/pep-0396 - Sussch
nhiều mô-đun không có phiên bản - sdaffa23fdsf
@ sdaffa23fdsf mô-đun nào không có phiên bản? Hơn serial, kiểm tra, PyQt và SQLite? Xem pycmake. - Pål GD
1 vì tính năng này hoạt động trên mọi hệ điều hành. Ngay cả khi một số mô-đun không có phiên bản thuộc tính, điều này là dễ nhất. - RolfBly


Sử dụng pkg_resources mô-đun được phân phối với setuptools thư viện. Lưu ý rằng chuỗi mà bạn chuyển đến get_distribution nên tương ứng với mục nhập PyPI.

>>> import pkg_resources
>>> pkg_resources.get_distribution("construct").version
'2.5.2'

và nếu bạn muốn chạy nó từ dòng lệnh bạn có thể làm:

python -c "import pkg_resources; print pkg_resources.get_distribution('construct').version"

(Disclaimer: Đây là khá nhiều một repost này câu trả lờinhưng đối với tôi, nó có liên quan nhiều hơn bất kỳ câu trả lời nào khác cho câu hỏi này.)


97
2017-10-06 08:46



Điều này hoạt động ngay cả khi mô-đun không có thuộc tính __version__. - imranal
Cái này thì sao? construct.version.full_version - MKatleast3
Nên là câu trả lời hàng đầu, đó là cách đáng tin cậy duy nhất để nhận phiên bản gói (nếu có) - henryJack
Có vẻ như điều này phát độc đáo với phiên bản bạn chỉ định trong các công cụ thiết lập setup gọi điện. Cảm ơn! - Matt Messersmith
Lưu ý rằng pkg_resources.get_distrinbution không phải lúc nào cũng hoạt động. Nó phát hành một số DistributionNotFound ngoại lệ với thông báo lỗi như: "Phân phối 'the_package_name' không được tìm thấy và được yêu cầu bởi ứng dụng" - mjv


Tôi nghĩ rằng điều này có thể giúp nhưng trước tiên cài đặt show gói để chạy pip show sau đó sử dụng chương trình để tìm phiên bản!

sudo pip install show
# in order to get package version execute the below command
sudo pip show YOUR_PACKAGE_NAME | grep Version

73
2018-04-27 13:55



Không có niềm vui ở đây! pip: error: No command by the name pip show (maybe you meant "pip install show") - Sam Finnigan
Câu trả lời này chỉ thực sự phù hợp nếu bạn cần một phiên bản gói từ trình bao. Nếu bạn cần nó trong Python, đây sẽ là một hack khá tệ. Dù sao, bạn có thể sử dụng lệnh sau để trích xuất phiên bản: pip show PACKAGE | awk '/^Version: / {sub("^Version: ", ""); print}'. Bạn có thể có thể nhận được ngay với một kịch bản AWK đơn giản hơn, nhưng nói trên sẽ được an toàn hơn cho bất kỳ trường hợp cạnh. - Six
@SamFinnigan pip show được triển khai trong pip 1.2.1.post1. Bạn đang sử dụng một phiên bản cực kỳ ngày của pip để không có thắc mắc bạn đang gặp rắc rối! Tôi hiện đang chạy pip 7.1.2. Nếu một cái gì đó ngăn cản bạn cập nhật, bạn luôn có thể cài đặt nó cục bộ hoặc trong virtualenv. - Six
đã làm việc cho tôi cảm ơn. một số packeges không có tham số .__ version__ sao cho một tham số hữu ích hơn. - Salih Karagoz
sudo pip? không, cám ơn - D G


Trong python3 với các dấu ngoặc xung quanh bản in

>>> import celery
>>> print(celery.__version__)
3.1.14

25
2017-10-29 09:03



Không phải mọi gói đều có __version__ thuộc tính. - Spedwards
Câu trả lời này là cho python 3 - một ngôn ngữ khác. Tuy nhiên, bạn có thể sử dụng câu trả lời này trong python 2. Để làm như vậy yêu cầu thêm dòng: "from Tương lai import print_function ", trước các câu lệnh khác. - user1976
@ user1976 Đây cũng là cú pháp hợp lệ trong Python 2. Các dấu ngoặc đơn được chấp nhận đơn giản xung quanh đối số print, giống như (2)+(3) đánh giá 5. Khi bạn có dấu phẩy bên trong dấu ngoặc đơn, mọi thứ có thể trở nên thú vị hơn, mặc dù print, nó vẫn hoạt động, sắp xếp. - tripleee


Cách tốt hơn để làm điều đó là:


Để biết chi tiết của gói cụ thể

pip show <package_name>

Nó chi tiết ra Package_name, Phiên bản, Tác giả, Vị trí, v.v.


$ 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: numpy-discussion@python.org
License: BSD
Location: c:\users\prowinjvm\appdata\local\programs\python\python36\lib\site-packages
Requires:

Để biết thêm chi tiết: >>> pip help



17
2017-12-16 15:05



đây chính xác là những gì tôi cần. - Zuoanqh
Chính xác, đó là tuyệt vời - Sushant


module.__version__ là một điều tốt đầu tiên để thử, nhưng nó không phải lúc nào cũng hiệu quả.

Nếu bạn không muốn bóc vỏ, và bạn đang sử dụng pip 8 hoặc 9, bạn vẫn có thể sử dụng pip.get_installed_distributions() để lấy các phiên bản từ bên trong Python:

cập nhật:  giải pháp ở đây hoạt động ở pip 8 và 9, nhưng ở pip 10 hàm đã được di chuyển từ pip.get_installed_distributions đến pip._internal.utils.misc.get_installed_distributions để chỉ rõ rằng nó không phải để sử dụng bên ngoài. Bạn không nên dựa vào nó nếu bạn đang sử dụng pip 10+.

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', ...]

16
2017-08-12 22:57



Điều này làm việc khi không có giải pháp nào khác trên trang này. - shiri
Có, không phải tất cả người tạo gói đã được đặt phiên bản, nhưng nếu bạn đang sử dụng pip, điều này sẽ luôn hoạt động. - waterproof
Thật không may, giải pháp này là không khả thi. Pip không đảm bảo bất kỳ API trong quá trình nào, chỉ có API thông qua dòng lệnh. Cách tiếp cận này không còn hoạt động trên pip 10. - Jason R. Coombs
Cảm ơn bạn đã đứng đầu @ JasonR.Coombs - điều đó quá tệ; Tôi đã cập nhật câu trả lời để làm rõ. - waterproof