2014-07-14 13 views

Odpowiedz

0

pip freeze zawiera wszystkie zainstalowane pakiety. Zakładając, że wiesz folder:

time.ctime(os.path.getctime(file))

powinno dać czas utworzenia pliku, czyli datę, kiedy pakiet został zainstalowany lub uaktualniony.

2

Nie znam wszystkich opcji pip, ale dla jednego modułu można uzyskać listę jego plików
, a następnie można sprawdzić jego daty za pomocą Pythona lub basha.

Na przykład listy plików w module requests

pip show --files requests 

wynik:

Name: requests 
Version: 2.2.1 
Location: /usr/local/lib/python2.7/dist-packages 
Requires: 
Files: 
    ../requests/hooks.py 
    ../requests/status_codes.py 
    ../requests/auth.py 
    ../requests/models.py 

etc. 

BTW: można użyć --help, aby zobaczyć więcej opcji dla niektórych funkcji

pip --help 
pip list --help 
pip show --help 
etc. 
20

Jeśli nie jest to konieczne różnią się między zaktualizowanymi i zainstalowanymi, można użyć czasu zmiany pliku pakietu. Tak:

import pip, os, time 

for package in pip.get_installed_distributions(): 
    print "%s: %s" % (package, time.ctime(os.path.getctime(package.location))) 

Btw: Zamiast pip freeze można użyć pip list który jest w stanie dostarczyć trochę więcej informacji, jak przestarzałych pakietów poprzez pip list -o.

+3

'import pip' jest bardzo interesująca. – furas

+4

Jedną z poważnych wad do patrzenia na 'package.location' jest to, że jest to tylko katalog, który zawiera katalog modułów (np. /usr/local/lib/python2.7/dist-packages), więc nawet jeśli zainstalujesz jedną paczkę , pokaże wszystkie uaktualnienia jako zaktualizowane. – jof

2

Można użyć opcji --log:

--log <path> Path to a verbose appending log. This log is inactive by default. 

np

$ pip install --log ~/.pip/pip.append.log gunicorn 

Albo można ustawić go w pip.conf być włączona domyślnie:

[global] 
log = <path> 

Wtedy wszystko operacje pip będą rejestrowane w trybie verbosely do s Plik pecified wraz z separatorem dziennika i datownika, np

$ pip install --log ~/.pip/pip.append.log gunicorn 
$ pip install --log ~/.pip/pip.append.log --upgrade gunicorn 

rejestruje następujące do ~/.pip/pip.append.log:

------------------------------------------------------------ 
/usr/bin/pip run on Mon Jul 14 14:35:36 2014 
Downloading/unpacking gunicorn 
... 
Successfully installed gunicorn 
Cleaning up... 
------------------------------------------------------------ 
/usr/bin/pip run on Mon Jul 14 14:35:57 2014 
Getting page https://pypi.python.org/simple/gunicorn/ 
URLs to search for versions for gunicorn in /usr/lib/python2.7/site-packages: 
* https://pypi.python.org/simple/gunicorn/ 
... 
Requirement already up-to-date: gunicorn in /usr/lib/python2.7/site-packages 
Cleaning up... 

Można analizować, co trzeba z tym log. Chociaż nie jest to najmilszy, to jest to standardowe narzędzie o nazwie pip.

5

Niestety, pakowanie w pythona sprawia, że ​​jest to nieco skomplikowane, ponieważ nie ma spójnego miejsca z listą plików pakietu lub katalogów modułów.

Oto najlepsze jakie wymyślić:

#!/usr/bin/env python 
# Prints when python packages were installed 
from __future__ import print_function 
from datetime import datetime 
import os 
import pip 


if __name__ == "__main__": 
    packages = [] 
    for package in pip.get_installed_distributions(): 
     package_name_version = str(package) 
     try: 
      module_dir = next(package._get_metadata('top_level.txt')) 
      package_location = os.path.join(package.location, module_dir) 
      os.stat(package_location) 
     except (StopIteration, OSError): 
      try: 
       package_location = os.path.join(package.location, package.key) 
       os.stat(package_location) 
      except: 
       package_location = package.location 
     modification_time = os.path.getctime(package_location) 
     modification_time = datetime.fromtimestamp(modification_time) 
     packages.append([ 
      modification_time, 
      package_name_version 
     ]) 
    for modification_time, package_name_version in sorted(packages): 
     print("{0} - {1}".format(modification_time, 
           package_name_version)) 
+0

Wydaje się, że daje to najdokładniejsze wyniki. Również +1 do sortowania i ładnego formatowania. – bluenote10

+0

Jest to zdecydowanie najbardziej przydatna odpowiedź do przeglądania, gdy pakiety zostały zainstalowane/ostatnio zaktualizowane. Dzięki! – Jeff

Powiązane problemy