Я знаю, как видеть установленные пакеты Python с помощью pip, просто используйте pip freeze
. Но есть ли способ увидеть дату и время, когда пакет установлен или обновлен с помощью pip?
См., Когда пакеты были установлены/обновлены с помощью pip
Ответ 1
Если нет необходимости отличаться от обновленного и установленного, вы можете использовать время изменения файла пакета. Например:
import pip, os, time
for package in pip.get_installed_distributions():
print "%s: %s" % (package, time.ctime(os.path.getctime(package.location)))
Btw: вместо pip freeze
вы можете использовать pip list
, который может предоставить дополнительную информацию, например, устаревшие пакеты через pip list -o
.
Ответ 2
К сожалению, упаковка python делает это немного сложнее, поскольку нет постоянного места, где перечислены файлы пакетов или каталоги модулей.
Вот лучшее, что я придумал:
#!/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))
Ответ 3
Я не знаю всех параметров pip
, но для одного модуля вы можете получить список его файлов
а затем вы можете проверить его даты с помощью python или bash.
Например, список файлов в модуле requests
pip show --files requests
результат:
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: вы можете использовать --help
, чтобы увидеть больше параметров для некоторых функций
pip --help
pip list --help
pip show --help
etc.
Ответ 4
Вы можете использовать опцию --log
:
--log <path> Path to a verbose appending log. This log is inactive by default.
например:
$ pip install --log ~/.pip/pip.append.log gunicorn
Или вы можете установить его в своем pip.conf
для включения по умолчанию:
[global]
log = <path>
Затем все операции pip
будут корректно записываться в указанный файл вместе с разделителем и меткой журнала, например:
$ pip install --log ~/.pip/pip.append.log gunicorn
$ pip install --log ~/.pip/pip.append.log --upgrade gunicorn
записывает следующее в ~/.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...
Вы можете проанализировать, что вам нужно из этого журнала. В то время как не самый приятный это стандартный объект pip
.
Ответ 5
Решение 1: packages.date.py:
import os
import time
from pip._internal.utils.misc import get_installed_distributions
for package in get_installed_distributions():
print (package, time.ctime(os.path.getctime(package.location)))
Решение 2: packages.alt.date.py:
#!/usr/bin/env python
# Prints when python packages were installed
from __future__ import print_function
from datetime import datetime
from pip._internal.utils.misc import get_installed_distributions
import os
if __name__ == "__main__":
packages = []
for package in 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))
Совместимость решений 1 и 2:
- обновленное решение для pip v10.x
- python v2, v2.7, v3, v3.5
Ответ 6
pip freeze
предоставляет вам все установленные пакеты. Предполагая, что вы знаете папку:
time.ctime(os.path.getctime(file))
должно указывать время создания файла, то есть дату, когда пакет был установлен или обновлен.