Właśnie zainstalowałem moduły Pythona: construct
i statlib
w setuptools
ten sposób:
# 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
Chcę mieć możliwość (programowego) sprawdzenia ich wersji. Czy istnieje odpowiednik, który python --version
można uruchomić z wiersza polecenia?
Moja wersja Pythona to 2.7.3
.
pip list
Odpowiedzi:
Sugeruję użycie pip zamiast easy_install . Za pomocą pip możesz wyświetlić listę wszystkich zainstalowanych pakietów i ich wersji
W większości systemów linuxowych możesz to potokować
grep
(lubfindstr
w systemie Windows), aby znaleźć wiersz dla konkretnego pakietu, który Cię interesuje:W przypadku pojedynczego modułu możesz wypróbować ten
__version__
atrybut , jednak istnieją moduły bez niego:Wreszcie, ponieważ polecenia w twoim pytaniu są poprzedzone prefiksem
sudo
, wygląda na to, że instalujesz się w globalnym środowisku python. Zdecydowanie zalecamy przyjrzenie się menedżerom środowiska wirtualnego Pythona , na przykład virtualenvwrapperźródło
pip show lxml | grep Version
; będzie działać znacznie szybciej, ponieważ sprawdza tylko jedną paczkę.pip list | grep lxml
grep
w oknach? Od momentu zamrożenia pip | grep lxml nie działa na windwos.pip list | findstr lxml
Możesz spróbować
źródło
inspect
) nie mają__version__
atrybutu.serial.VERSION
. Być może istnieją też inne powszechnie używane moduły, które nie są zgodne z PEP 0396: python.org/dev/peps/pep-0396print(contruct.__version__)
jeśli używasz Python 3. *Użyj
pkg_resources
modułu dystrybuowanego zsetuptools
biblioteką. Zauważ, że ciąg przekazywany doget_distribution
metody powinien odpowiadać wpisowi PyPI.a jeśli chcesz uruchomić go z wiersza poleceń, możesz:
Zauważ, że ciąg, który przekazujesz do
get_distribution
metody powinien być nazwą pakietu zarejestrowaną w PyPI, a nie nazwą modułu, który próbujesz zaimportować.Niestety nie zawsze są takie same (np. Robisz to
pip install memcached
, aleimport memcache
).źródło
__version__
.construct.version.full_version
pkg_resources.get_distrinbution
nie zawsze też działa. WystępujeDistributionNotFound
wyjątek z komunikatem o błędzie, takim jak: „Nie znaleziono dystrybucji„ nazwa_pakietu ”i jest ona wymagana przez aplikację”get_distribution
metodyMyślę, że to może pomóc, ale najpierw zainstaluj
show
pakiet, aby uruchomić,pip show
a następnie użyj show, aby znaleźć wersję!źródło
pip: error: No command by the name pip show (maybe you meant "pip install show")
pip show PACKAGE | awk '/^Version: / {sub("^Version: ", ""); print}'
. Prawdopodobnie możesz uciec z prostszym skryptem AWK, ale wyżej wspomniane będzie bezpieczniejsze dla wszelkich przypadków krawędzi.pip show
został zaimplementowany w pip 1.2.1.post1 . Używasz strasznie przestarzałej wersji pipa, więc nic dziwnego, że masz problemy! Obecnie korzystam z pip 7.1.2 . Jeśli coś uniemożliwia aktualizację, zawsze możesz po prostu zainstalować ją lokalnie lub w virtualenv.Lepszym sposobem na to jest:
Szczegółowe informacje na temat konkretnego pakietu
pip show <package_name>
Po więcej szczegółów:
>>> pip help
pip
należy zaktualizować, aby to zrobić.W systemie Windows zalecane polecenie to:
źródło
pip show scikit-learn
zamiastpip show sklearn
. sklearn jest krótką formą używaną podczas importu, nie rozpoznaje się bezpośrednio,pip
ponieważscikit-learn
jest to pełny pakiet, nie ucz sięsklearn
W python3 z nawiasami wokół wydruku
źródło
__version__
atrybut.print
, podobnie jak(2)+(3)
ewaluuje5
. Kiedy w nawiasach znajduje się przecinek, rzeczy mogą stać się nieco bardziej interesujące, choćprint
nadal działa.module.__version__
jest dobrą pierwszą rzeczą do wypróbowania, ale nie zawsze działa.Jeśli nie chcesz używać powłoki, a używasz pip 8 lub 9, nadal możesz używać
pip.get_installed_distributions()
do pobierania wersji z poziomu Pythona:aktualizować: rozwiązanie tutaj pracuje w pip 8 i 9, ale w pip 10 funkcja została przeniesiona z
pip.get_installed_distributions
abypip._internal.utils.misc.get_installed_distributions
wyraźnie wskazać, że nie jest do użytku zewnętrznego. Nie należy polegać na tym, jeśli używasz pip 10+.źródło
pip
, to powinno zawsze działać.Poprzednie odpowiedzi nie rozwiązały mojego problemu, ale ten kod:
źródło
__version__
jeśli nie jest zdefiniowana. Jeżeli nie ma__version__
, nie otrzymasz żadnego wyniku dla żądanego pakietu.__version__
atrybutu, który jest standardem ( python.org/dev/peps/pep-0396/#specification ), nie jest możliwe ustalenie , gdzie i jak jest uwzględniona wersja bez ręcznego sprawdzenia.Możesz
importlib_metadata
do tego użyć biblioteki.Jeśli korzystasz z Pythona
<3.8
, najpierw zainstaluj go za pomocą:Ponieważ python
3.8
jest zawarty w standardowej bibliotece.Następnie, aby sprawdzić wersję pakietu (w tym przykładzie
lxml
) uruchom:Należy pamiętać, że działa to tylko w przypadku pakietów zainstalowanych z PyPI. Ponadto należy przekazać nazwę
version
metody jako argument do metody, a nie nazwę modułu podaną przez ten pakiet (chociaż zwykle są one takie same).źródło
Użyj,
dir()
aby dowiedzieć się, czy moduł ma__version__
w ogóle atrybut.źródło
Jeśli powyższe metody nie działają, warto wypróbować następujące opcje w pythonie:
Zobacz Uzyskaj wersję Python Tornado?
Uwaga,
.version
działało dla mnie także na kilka innych oprócz tornado.źródło
najpierw dodaj Python, pip do zmiennych środowiskowych. abyś mógł wykonywać polecenia z wiersza poleceń. następnie po prostu wydaj polecenie python . następnie zaimportuj pakiet
->
import scrapy
następnie wydrukuj nazwę wersji
->
print(scrapy.__version__)
To na pewno zadziała
źródło
__version__
atrybut.pip freeze
jednak <pakiet> .__ wersja_ działało. Dzięki za wysłanie.Zakładając, że używamy Notatnika Jupyter (jeśli korzystasz z terminalu, upuść wykrzykniki):
1) jeśli pakiet (np. Xgboost) został zainstalowany za pomocą pip :
2) jeśli pakiet (np. Caffe ) został zainstalowany z conda :
źródło
Niektóre moduły nie mają
__version__
atrybutu, więc najłatwiej jest sprawdzić w terminalu:pip list
źródło
W wersji Python 3.8 jest nowy
metadata
moduł wimportlib
pakiecie, który również może to zrobić.Oto przykład z dokumentów:
źródło
Sugeruję otwarcie
python
powłoki w terminalu (w wersji python, którą jesteś zainteresowany), zaimportowanie biblioteki i uzyskanie jej__version__
atrybutu.Uwaga 1: Musimy wziąć pod uwagę wersję Pythona . Jeśli zainstalowaliśmy różne wersje Pythona, musimy otworzyć terminal w interesującej nas wersji Pythona. Na przykład otwarcie terminala za pomocą
python3.8
może (z pewnością da) inną wersję biblioteki niż otwarcie za pomocąpython3.5
lubpython2.7
.Uwaga 2: Mamy unikać korzystania z
print
funkcji , ponieważ jego zachowanie zależy python2 lub python3. Nie potrzebujemy tego, terminal pokaże wartość wyrażenia.źródło
Działa to również w Jupyter Notebook na Windowsie! Tak długo, jak Jupyter jest uruchamiany z wiersza poleceń zgodnego z bash, takiego jak Git Bash (MingW64), rozwiązania podane w wielu odpowiedziach mogą być używane w Jupyter Notebook w systemach Windows z jednym drobnym poprawieniem.
Korzystam z systemu Windows 10 Pro z Pythonem zainstalowanym za pośrednictwem Anacondy, a następujący kod działa, gdy uruchamiam Jupyter za pomocą Git Bash (ale nie działa, gdy uruchamiam z monitu Anaconda).
Ulepszenie: dodaj wykrzyknik (
!
) przed,pip
aby to zrobić!pip
.źródło
Szybki program pythonowy do listy wszystkich pakietów (możesz skopiować go do wymagań.txt )
Dane wyjściowe wyglądałyby następująco:
źródło
(patrz także https://stackoverflow.com/a/56912280/7262247 )
Uznałem, że używanie różnych dostępnych narzędzi (w tym najlepszego
pkg_resources
wspomnianego przez Jakuba Kukula ) jest dość zawodne , ponieważ większość z nich nie obejmuje wszystkich przypadków . Na przykładPonieważ potrzebowaliśmy niezawodnego sposobu na uzyskanie wersji dowolnego pakietu, modułu lub submodułu, napisałem getversion . Jest dość prosty w użyciu:
Szczegółowe informacje można znaleźć w dokumentacji .
źródło
Aby uzyskać listę niestandardowych modułów (pip) zaimportowanych do bieżącego modułu:
Wynik:
Uwaga:
Ten kod został opracowany razem z rozwiązaniami zarówno na tej stronie, jak iz listy importowanych modułów?
źródło
W podsumowaniu:
(Zapewni wszystkie biblioteki wraz ze szczegółami wersji).
I:
(Daje pełne szczegóły biblioteki).
źródło
Możesz spróbować:
Spowoduje to wyświetlenie wszystkich pakietów wraz z ich wersjami. Wynik
źródło
Opierając się na odpowiedzi Jakuba Kukula znalazłem bardziej niezawodny sposób rozwiązania tego problemu.
Główny problem tego podejścia polega na tym, że pakiety muszą być instalowane „konwencjonalnie” (i nie obejmuje użycia
pip install --user
) lub znajdować się w systemie PATH przy inicjalizacji Pythona.Aby się obejść, możesz użyć
pkg_resources.find_distributions(path_to_search)
. To w zasadzie wyszukuje dystrybucje, które byłyby importowalne, gdybypath_to_search
znajdowały się w ŚCIEŻCE systemu.Możemy iterować przez ten generator w następujący sposób:
Zwróci to słownik posiadający moduły jako klucze i ich wersję jako wartość. To podejście można rozszerzyć na znacznie więcej niż numer wersji.
Dziękujemy Jakubowi Kukulowi za wskazanie właściwego kierunku
źródło
Pisanie tej odpowiedzi dla użytkowników systemu Windows. Jak zasugerowano we wszystkich innych odpowiedziach, możesz użyć instrukcji jako:
Istnieją jednak moduły, które nie drukują swojej wersji nawet po zastosowaniu powyższej metody. Możesz więc po prostu:
źródło
możesz najpierw zainstalować taki pakiet, a następnie sprawdzić jego wersję
powinien dać ci wersję pakietu
źródło