Как очистить кэш pip

Обновлено: 07.07.2024

Мне нужно установить psycopg2 v2.4.1 специально. Я случайно это сделал:

Это устанавливает 2.4.4 вместо более ранней версии.

Теперь даже после того, как я pip деинсталлирую psycopg2 и попытаюсь переустановить его с правильной версией, кажется, что pip повторно использует кэш, который он загрузил в первый раз.

Как я могу заставить pip очистить свой кэш загрузки и использовать конкретную версию, которую я включаю в команду?

Я храню локальные объекты в кэше breeze, как я могу удалить их из кэша, не выходя на сервер? в документации говорится Удаление объекта Вы удаляете сущность, изменяя ее EntityState на “Deleted” следующим образом: 1 someEntity.entityAspect.setDeleted(); // отметка для удаления setDeleted не.

Если я вставлю в кэш, присвоив значение: CacheКак очистить кэш pip = значение; каков срок годности? Удаление одного и того же значения из кэша: Я хочу проверить, находится ли значение в кэше на if(CacheКак очистить кэш pip!=null) , лучше ли удалить его из кэша на Cache.Remove(key) или CacheКак очистить кэш pip=null ? -- Редактирование --.

Если вы используете pip 6.0 или более новую версию, попробуйте добавить опцию --no-cache-dir .

Если вы используете pip старше pip 6.0, обновите его с помощью pip install -U pip .

Очистите каталог кэша там, где это необходимо для вашей системы

Начиная с v6.0, pip предоставляет кэш on-by-default, который функционирует аналогично веб-браузеру. В то время как кэш включен по умолчанию и предназначен делать правильные вещи по умолчанию вы можете отключить кэш и всегда получить доступ к PyPI, используя опцию --no-cache-dir .

Где находится папка кэша Python pip? У меня была ошибка во время установки и теперь переустановите пакеты с помощью файлов кэша Где этот каталог? Я хочу сделать резервную копию их для установки в будущем. Возможно ли это ? Например у меня есть вот это : Using cached cssselect-0.9.1.tar.gz Я искал.

pip может установить пакет, игнорирующий кэш, например

(pip сопровождающий здесь!)

Конкретная проблема "installing неправильной версии из-за проблемы caching", упомянутой в вопросе, была исправлена в pip 1.4 (еще в 2013 году!):

Начиная с pip 6.0 (еще в 2014 году!), командам pip install , pip download и pip wheel можно сказать, чтобы они избегали использования кэша с параметром --no-cache-dir . (например: pip install --no-cache-dir <package> )

Начиная с pip 10.0 (еще в 2018 году!), была добавлена команда pip config , которая может быть использована для настройки pip всегда игнорировать кэш- pip config set global.cache-dir false настраивает pip не использовать кэш "globally" (то есть во всех командах).

Начиная с pip 20.1, pip имеет команду pip cache для управления содержимым кэша pip.

  • pip cache purge удаляет все файлы wheel в кэше.
  • pip cache remove matplotlib выборочно удаляет файлы, связанные с matplotlib, из кэша.

Таким образом, pip предоставляет множество способов настройки того, как он использует кэш:

  • pip install --no-cache-dir <package> : установите пакет без использования кэша, только для этого запуска.
  • pip config set global.cache-dir false : настройте pip так, чтобы он не использовал кэш "globally" (во всех командах)
  • pip cache remove matplotlib : удаляет все файлы wheel, связанные с matplotlib, из кэша pip.
  • pip cache purge : чтобы очистить все файлы из кэша pip.

На Ubuntu мне пришлось удалить /tmp/pip-build-root .

Если вы хотите установить параметр --no-cache-dir по умолчанию, вы можете поместить его в pip.conf :

Расположение pip.conf зависит от вашего OS. Дополнительные сведения см. В документации .

У меня просто была похожая проблема, и я обнаружил, что единственный способ заставить pip обновить пакет-это удалить каталог $PWD/build ( %CD%\build на Windows), который мог остаться от ранее незавершенной установки или предыдущей версии pip (теперь он удаляет каталоги сборки после успешной установки).

Начиная с pip 20.1b1, который был выпущен 21 апреля 2020 года и "добавил команду pip cache для проверки / управления кэшем колеса pip", можно выполнить эту команду:

На archlinux pip кэш находится по адресу

На моем mac мне пришлось удалить каталог кэша

На Windows 7 мне пришлось удалить %HOMEPATH%/pip .

Если вы используете virtualenv, найдите каталог build в корневом каталоге вашей среды.

Мне пришлось удалить %TEMP%\pip-build на Windows 7

На Mac OS (Mavericks) мне пришлось удалить /tmp/pip-build/

Лучший способ сделать это-удалить кэш и перестроить его. Таким образом, если вы установите его снова для других virtualenv, он будет использовать кэш вместо сборки каждый раз, когда вы его устанавливаете.

Например, когда вы установите его, он скажет, что использует кэшированное колесо,

Просто удалите его и перезапустите установку.

(. ) похоже, что pip повторно использует кэш (. )

Я почти уверен, что это не то, что происходит. Pip используется (ошибочно) для повторного использования каталога сборки, а не кэша. Это было исправлено в версии 1.4 из pip, которая была выпущена на 2013-07-23.

Похожие вопросы:

Я устанавливаю много одинаковых пакетов в разных средах virtualenv. Есть ли способ, которым я могу загрузить пакет один раз, а затем установить pip из локального кэша? Это позволило бы сократить.

Как правильно установить pip пакетов в virtualenv с помощью кэшированных пакетов? Я пробовал устанавливать --timeout=360 и --use-mirrors , но производительность pypi настолько слабая, что она.

РЕДАКТИРОВАТЬ Circumflex обращается к getKeys ehcache , поэтому должно быть возможно сделать то же самое в Play, при условии, что реализация плагина кэша предоставляет getKeys, что может быть.

Я храню локальные объекты в кэше breeze, как я могу удалить их из кэша, не выходя на сервер? в документации говорится Удаление объекта Вы удаляете сущность, изменяя ее EntityState на “Deleted”.

Если я вставлю в кэш, присвоив значение: CacheКак очистить кэш pip = значение; каков срок годности? Удаление одного и того же значения из кэша: Я хочу проверить, находится ли значение в кэше на.

Где находится папка кэша Python pip? У меня была ошибка во время установки и теперь переустановите пакеты с помощью файлов кэша Где этот каталог? Я хочу сделать резервную копию их для установки в.

Я использую pip версии 7.0.3 и python 2.7. Когда я устанавливаю пакет, он показывает, как использовать каталог кэша. Я хочу знать местоположение каталога кэша. И я использую virtualevn, и pip версия.

Я надеюсь получить мои инструкции pip install внутри моих docker build как можно быстрее. Я прочитал много постов , объясняющих, как добавление вашего requirements.txt перед rest приложения помогает.

У меня было несколько пакетов pip, установленных из моих предыдущих проектов, и я удалил все пакеты из своей виртуальной среды, но теперь, когда я хочу установить свежие пакеты, чем pip даже не ищет.

Сегодня установочный пакет PIP, я использовал кеш, это очень неудобно .

Установка кэша PIP Удалить:

If using pip 6.0 or newer, try adding the --no-cache-dir option.

If using pip older than pip 6.0, upgrade it with pip install -U pip .

Интеллектуальная рекомендация

Поверните строку в целые числа

Тема Описание Преобразуйте строку в целое число (реализация функции integer.valueof (строка), но строка не совпадает 0), требуя функции библиотеки, которая нельзя использовать для преобразования целых.

Docker создает репликацию Redis Master-Slave

Centos установить докер быстрый старт докера Создать Dockerfile Поместите файл на сервер Linux, создайте папку / usr / docker / redis и поместите его в этот каталог Выполните следующий код в каталоге .


Установка GateOne на новом CentOS7

Установка GateOne на новом CentOS7 В последнее время исследуются такие инструменты, как WebSSH2, в настоящее время требуется встроить терминал ssh в веб-приложение и найти GateOne. GateOne - это веб-в.


Примечания к исследованию Qt4 (5), QWaitCondition of QThread Learning


Практические занятия: решения проблем системы управления обучением

Сразу после получения задания будет много трудностей и много проблем. Хорошо иметь проблему, а это значит, что вы можете получить новые знания. Неважно, есть ли проблемы, ключ в том, как их решить. пр.

Вам также может понравиться


искробезопасная практика (5) обратный индекс

задний план Поисковые системы обычно создают инвертированный индекс ключевых слов. Ключевое слово - индекс, за которым следуют веб-страницы, содержащие ключевое слово. На этот раз, используя данные мо.


Решение центра тяжести неправильного многоугольника

Справочник статей Во-первых, решение центра тяжести неправильных многоугольников 1.1 Метод расчета треугольника центра тяжести 1.2 Метод расчета площади треугольника 1.3 Метод расчета площади полигона.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » pip Uninstall / удаление пакета, установленного с помощью pip

(2 оценок, среднее: 5,00 из 5)

Как управлять пакетами Python с использованием Pip

М ы покажем вам, как удалить пакет pip, который вы установили с помощью pip install. pip, это инструмент управления пакетами, который может быть использован для установки и управления пакетами программ, написанных на Python, которые можно найти в Python Package Index (PyPI). pip, это рекурсивный акроним, который может стоять либо “Pip Installs Packages” или “Pip Installs Python”. В качестве альтернативы, pip означает «привилегированная программа инсталлятора». Давайте посмотрим, как вы можете удалить pip.

Если вы следовали одним из наших предыдущих руководств о том, как установить и использовать pip на Ubuntu 16.04 или как установить и использовать pip на CentOS 7 и вы установили некоторые пакеты Python, которые вы не хотите использовать, вы можете легко удалить их с помощью pip.

Прежде всего, подключитесь к серверу Linux с помощью SSH. Затем узнайте список установленных на текущий момент пакетов, используя следующую команду:

Команда выше даст вам выход аналогичный приведенному ниже:

Все эти пакеты уже установлены через pip, и вы можете удалить любой пакет, который вам не нужен. Чтобы удалить установленный пакет с помощью команды pip install , вы можете использовать pip uninstall . Например, чтобы удалить пакет beautifulsoup4 , вы можете использовать следующую команду:

После выполнения команды, pip попросит вас подтвердить действие. Введите y чтобы подтвердить и пакет будет удален из системы.

Как вы можете видеть, удалить пакеты с pip так просто, как установить их. Изучение того, как вы можете управлять пакетами, установленные на вашем Ubuntu VPS или CentOS VPS с pipом поможет вам создавать лучшие приложения. pip также полезен для многих других задач, как обновление пакетов, которые установлены в настоящее время, или установить конкретную версию пакета для проекта. Для полного списка опций, которые вы можете использовать с pip, вы можете узнать через команду pip --help

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.


Эта публикация – незначительно сокращенный перевод статьи Сантьяго Валдаррама Caching in Python Using the LRU Cache Strategy. Переведенный текст также доступен в виде блокнота Jupyter.

Кэширование – один из подходов, который при правильном использовании значительно ускоряет работу и снижает нагрузку на вычислительные ресурсы. В модуле стандартной библиотеки Python functools реализован декоратор @lru_cache , дающий возможность кэшировать вывод функций, используя стратегию Least Recently Used (LRU, «вытеснение давно неиспользуемых»). Это простой, но мощный метод, который позволяет использовать в коде возможности кэширования.

В этом руководстве мы рассмотрим:

  • какие стратегии кэширования доступны и как их реализовать с помощью декораторов;
  • что такое LRU и как работает этот подход;
  • как повысить производительность программы с помощью декоратора @lru_cache ;
  • как расширить функциональность декоратора @lru_cache и прекратить кэширование по истечении определенного интервала времени.

Кэширование – это метод оптимизации хранения данных, при котором операции с данными производятся эффективнее, чем в их источнике.

Как поступит программа, если читатель решит сравнить пару статей и станет многократно между ними перемещаться? Без кэширования приложению придется каждый раз получать одно и то же содержимое. В этом случае неэффективно используется и система пользователя, и сервер со статьями, на котором создается дополнительная нагрузка.

Лучшим подходом после получения статьи было бы хранить контент локально. Когда пользователь в следующий раз откроет статью, приложение сможет открыть контент из сохраненной копии, вместо того, чтобы заново загружать материал из источника. В информатике этот метод называется кэшированием.

В Python можно реализовать кэширование, используя словарь. Вместо того, чтобы каждый раз обращаться к серверу, можно проверять, есть ли контент в кэше, и опрашивать сервер только если контента нет. В качестве ключа можно использовать URL статьи, а в качестве значения – ее содержимое:

Примечание. Для запуска этого примера у вас должна быть установлена библиотека requests :

Хотя вызов get_article() выполняется дважды, статья с сервера загружается лишь один раз. После первого доступа к статье мы помещаем ее URL и содержимое в словарь cache . Во второй раз код не требует повторного получения элемента с сервера.

В этой простой реализации кэширования закралась очевидная проблема: содержимое словаря будет неограниченно расти: чем больше статей открыл пользователь, тем больше было использовано места в памяти.

Чтобы обойти эту проблему, нам нужна стратегия, которая позволит программе решить, какие статьи пора удалить. Существует несколько различных стратегий, которые можно использовать для удаления элементов из кэша и предотвращения превышения его максимального размера. Пять самых популярных перечислены в таблице.

Стратегия Какую запись удаляем Эти записи чаще других используются повторно
First-In/First-Out (FIFO) Самая старая Новые
Last-In/First-Out (LIFO) Самая недавняя Старые
Least Recently Used (LRU) Использовалась наиболее давно Недавно прочитанные
Most Recently Used (MRU) Использовалась последней Прочитанные первыми
Least Frequently Used (LFU) Использовалась наиболее редко Использовались часто

Кэш, реализованный посредством стратегии LRU, упорядочивает элементы в порядке их использования. Каждый раз, когда мы обращаемся к записи, алгоритм LRU перемещает ее в верхнюю часть кэша. Таким образом, алгоритм может быстро определить запись, которая дольше всех не использовалась, проверив конец списка.

На следующем рисунке показано представление кэша после того, как пользователь запросил статью из сети.

Процесс заполнения LRU-кэша, шаг 1

Процесс заполнения LRU-кэша, шаг 1

Статья сохраняется в последнем слоте кэша перед тем, как будет передана пользователю. На следующем рисунке показано, что происходит, когда пользователь запрашивает следующую статью.

Процесс заполнения LRU-кэша, шаг 2

Процесс заполнения LRU-кэша, шаг 2

Вторая статья занимает последний слот, перемещая первую статью вниз по списку.

Стратегия LRU предполагает: чем позже использовался объект, тем больше вероятность, что он понадобится в будущем. Алгоритм сохраняет такой объект в кэше в течение максимально длительного времени.

Один из способов реализовать кэш LRU в Python – использовать комбинацию двусвязного списка и хеш-таблицы. Головной элемент двусвязного списка указывает на последнюю запрошенную запись, а хвостовой – на наиболее давно использовавшуюся.

На рисунке ниже показана возможная структура реализации кэша LRU.

Схема реализации кэширования

Схема реализации кэширования

Используя хеш-таблицу, мы обеспечиваем доступ к каждому элементу в кэше, сопоставляя каждую запись с определенным местом в двусвязном списке. При этом доступ к недавно использовавшемуся элементу и обновление кэша – это операции, выполняемые за константное время (то есть с временной сложностью алгоритма 𝑂 ( 1 ) .

Примеры временной сложности различных функций Python рассматривались на proglib в статье «Сложность алгоритмов и операций на примере Python».

Начиная с версии 3.2, для реализации стратегии LRU Python включает декоратор @lru_cache .

Декоратор @lru_cache за кулисами использует словарь. Результат выполнения функции кэшируется под ключом, соответствующим вызову функции и предоставленным аргументам. То есть чтобы декоратор работал, аргументы должны быть хешируемыми.

Наглядное представление алгоритма: перепрыгиваем ступеньки

Представим, что мы хотим определить число способов, которыми можем достичь определенной ступеньки на лестнице. Сколько есть способов, например, добраться до четвертой ступеньки, если мы можем переступить-перепрыгнуть 1, 2, 3 (но не более) ступеньки? На рисунке ниже представлены соответствующие комбинации.


Под каждым из рисунков приведен путь с указанием числа ступенек, преодоленных за один прыжок. При этом количество способов достижения четвертой ступеньки равно общему числу способов, которыми можно добраться до третьей, второй и первой ступенек:


Получается, что решение задачи можно разложить на более мелкие подзадачи. Чтобы определить различные пути к четвертой ступеньке, мы можем сложить четыре способа достижения третьей ступеньки, два способа достижения второй ступеньки и единственный способ для первой. То есть можно использовать рекурсивный подход.

Опишем программно рекурсивное решение в точности, как мы его сейчас видим:

Код работает для 4 ступенек. Давайте проверим, как он подсчитает число вариантов для лестницы из 30 ступенек.

Получилось свыше 53 млн. комбинаций. Однако когда мы искали решение для тридцатой ступеньки, сценарий мог длиться довольно долго.

Измерим, как долго длится выполнение кода.

Для этого мы можем использовать модуль Python timeit или соответствующую команду в блокноте Jupyter.

Количество секунд зависит от характеристик используемого компьютера. В моей системе расчет занял 3 секунды, что довольно медленно для всего тридцати ступенек. Это решение можно значительно улучшить c помощью мемоизации.

Один из примеров мемоизации рассматривался в статье«Python и динамическое программирование на примере задачи о рюкзаке».

Наша рекурсивная реализация решает проблему, разбивая ее на более мелкие шаги, которые дополняют друг друга. На следующем рисунке показано дерево для семи ступенек, в котором каждый узел представляет определенный вызов steps_to() :

Дерево вызовов функции step_to()

Дерево вызовов функции step_to()

Можно заметить, что алгоритму приходится вызывать steps_to() с одним и тем же аргументом несколько раз. Например, steps_to(5) вычисляется два раза, steps_to(4) – четыре раза, steps_to(3) – семь раз и т. д. Вызов одной и той же функции несколько раз запускает вычисления, в которых нет необходимости – результат всегда один и тот же.

Чтобы решить эту проблему, мы можем использовать мемоизацию: мы сохраняем в памяти результат, полученный для одних и тех же входных значений и затем возвращаем при следующем аналогичном запросе. Прекрасная возможность применить декоратор @lru_cache !

Если вы незнакомы с концепцией декораторов, но хотите глубже разобраться в вопросе, просто прочитайте материал«Всё, что нужно знать о декораторах Python» (она также адаптирована в форматеJupyterи Colab). Для наших задач достаточно знать, что это функции-обертки, которые позволяют модифицировать поведение функций и классов. Чтобы применить декоратор, достаточно объявить его перед определением функции.

Импортируем декоратор из модуля functools и применим к основной функции.

В Python 3.8 и выше, если вы не указываете никаких параметров, можно использовать декоратор @lru_cache без скобок. В более ранних версиях необходимо добавить круглые скобки: @lru_cache() .

От единиц секунд к десяткам наносекунд – потрясающее улучшение, обязанное тем, что за кулисами декоратор @lru_cache сохраняет результаты вызова steps_to() для каждого уникального входного значения.

Подключив декоратор @lru_cache , мы сохраняем каждый вызов и ответ в памяти для последующего доступа, если они потребуются снова. Но сколько таких комбинаций мы можем сохранить, пока не иссякнет память?

У декоратора @lru_cache есть атрибут maxsize , определяющий максимальное количество записей до того, как кэш начнет удалять старые элементы. По умолчанию maxsize равен 128. Если мы присвоим maxsize значение None , то кэш будет расти без всякого удаления записей. Это может стать проблемой, если мы храним в памяти слишком много различных вызовов.

Применим @lru_cache с использованием атрибута maxsize и добавим вызов метода cache_info() :

Мы можем использовать информацию, возвращаемую cache_info() , чтобы понять, как работает кэш, и настроить его, чтобы найти подходящий баланс между скоростью работы и объемом памяти:

  • hits=52 – количество вызовов, которые @lru_cache вернул непосредственно из памяти, поскольку они присутствовали в кэше;
  • misses=30 – количество вызовов, которые взяты не из памяти, а были вычислены (в случае нашей задачи это каждая новая ступень);
  • maxsize=16 – это размер кэша, который мы определили, передав его декоратору;
  • currsize=16 – текущий размер кэша, в этом случае кэш заполнен.

Перейдем от учебного примера к более реалистичному. Представьте, что мы хотим отслеживать появление на ресурсе Real Python новых статей, содержащих в заголовке слово python – выводить название, скачивать статью и отображать ее объем (число символов).

Real Python предоставляет протокол Atom, так что мы можем использовать библиотеку feedparser для анализа канала и библиотеку requests для загрузки содержимого статьи, как мы это делали раньше.

Скрипт будет работать непрерывно, пока мы не остановим его, нажав [Ctrl + C] в окне терминала (или не прервем выполнение в Jupyter-блокноте).

Код загружает и анализирует xml-файл из RealPython. Далее цикл перебирает первые пять записей в списке. Если слово python является частью заголовка, код печатает заголовок и длину статьи. Затем код «засыпает» на 5 секунд, после чего вновь запускается мониторинг.

Мы можем реализовать описанную идею в новом декораторе, который расширяет @lru_cache . Кэш должен возвращать результат на запрос только, если срок кэширования записи еще не истек – в обратном случае результат должен забираться с сервера. Вот возможная реализация нового декоратора:

Декоратор @timed_lru_cache реализует функциональность для оперирования временем жизни записей в кэше (в секундах) и максимальным размером кэша.

Код оборачивает функцию декоратором @lru_cache . Это позволяет нам использовать уже знакомую функциональность кэширования.

Перед доступом к записи в кэше декоратор проверяет, не наступила ли дата истечения срока действия. Если это так, декоратор очищает кэш и повторно вычисляет время жизни и срок действия. Время жизни распространяется на кэш в целом, а не на отдельные статьи.

Теперь мы можем использовать новый декоратор @timed_lru_cache с функцией monitor() , чтобы предотвратить скачивание с сервера содержимого статьи при каждом новом запросе. Собрав код в одном месте, получим следующий результат:

В приведенном примере скрипт пытается получить доступ к статьям каждые 5 секунд, а срок действия кэша истекает раз в минуту.

Кэширование – важный метод оптимизации, повышающий производительность любой программной системы. Понимание того, как работает кэширование, является фундаментальным шагом на пути к его эффективному включению в программный код.

В этом уроке мы кратко рассмотрели:

  • какие бывают стратегии кэширования;
  • как работает LRU-кэширование в Python;
  • как использовать декоратор @lru_cache ;
  • как рекурсивный подход в сочетании с кэшированием помогает достаточно быстро решить задачу.

Следующим шагом к реализации различных стратегий кэширования в ваших приложениях может стать библиотека cachetools, предоставляющая особые типы данных и декораторы, охватывающие самые популярные стратегии кэширования.

Читайте также: