Что такое кеш яиц Python (PYTHON_EGG_CACHE)?

Я только что обновил с Python 2.6.1 до 2.6.4 на своей машине разработки и после запуска скрипта python было представлено следующее сообщение:

Не удается извлечь файл (ы) в кеш-кеш

При попытке извлечь файл (ы) в кеш-память Python произошла следующая ошибка:

[Errno 13] Разрешение отклонено: '/var/www/.python-eggs'

В настоящее время каталог кэша яиц Python установлен на:

/var/www/.python-eggs

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

В документах python ничего нет, поэтому я немного теряю информацию о лучших практиках в том, где разместить этот каталог и для чего он используется.

Может ли кто-нибудь объяснить, что такое кеш яиц Python?

Кроме того, вы можете объяснить, почему / как он отличается от каталога site-packages использует Python для хранения яиц (как я понимаю)?

    6 Solutions collect form web for “Что такое кеш яиц Python (PYTHON_EGG_CACHE)?”

    Из моих исследований выясняется, что некоторые яйца упакованы в виде zip-файлов и сохраняются как таковые в каталоге site-packages Python.

    Эти замятые яйца нужно распаковать до того, как их можно будет выполнить, поэтому они будут расширены в каталог PYTHON_EGG_CACHE который по умолчанию – ~/.python-eggs (находится в домашнем каталоге пользователя). Если этого не существует, это вызывает проблемы при попытке запуска приложений.

    Существует ряд исправлений:

    1. Создайте .python-eggs в домашнем каталоге пользователя и сделайте его доступным для записи для пользователя.
    2. Создайте глобальный каталог для распаковки (например, /tmp/python-eggs ) и установите переменную окружения PYTHON_EGG_CACHE в этот каталог.
    3. Используйте переключатель -Z при использовании easy_install для распаковки пакета при установке.

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

    Кроме того, как указано в сообщении об ошибке, вы можете указать другой каталог кеша яйца в своей среде, установив PYTHON_EGG_CACHE = / some / other / dir. Самый простой способ сделать это – установить его в ~ / .bash_profile (если вы используете bash), например:

     export PYTHON_EGG_CACHE=/some/other/dir 

    Возможно, вам придется установить его в своей среде Apache, если вы используете веб-приложение.

    Это темный побочный эффект от использования другого красивого механизма яиц.

    Яйца – это пакеты (каталог, полный файлов), упакованный в один .egg файл, чтобы упростить .egg .

    Они хранятся в /site-packages/ dir.

    Пока файлы, хранящиеся в яйце, являются .py файлами, он отлично работает. Импорт Python может импортировать вещи из любого файлового объекта, как обычный файл.

    Но когда что-то вроде .so случается, чтобы зайти туда, python не может объяснить базовой ОС, что он хочет загрузить библиотеку, которая не имеет физического имени. И единственные обходные пути, которые, по мнению авторов, были распакованы в временную директорию. Естественно, это не /site-packages/ поскольку /site-packages/ недоступен для обычных пользователей.

    Таким образом, вы можете

    • установите PYTHON_EGG_DIR на /tmp или

    • предоставить пользователю www разрешение на запись в /var/www/.python-eggs
      (чтобы файлы не распаковывались каждый раз при очистке / tmp), или лучше, чем

    • разархивируйте яйцо, как было предложено @ shalley303
      (и избегайте расстегивания яйца во время выполнения).

    Вы также можете отключить использование .egg после его установки. Вам нужно зайти в каталог сайтов-пакетов, извлечь .egg, а затем переместить его в скрытый файл (или удалить его или что-то еще).

    Вот пример того, что я сделал, чтобы отключить файл .gg модуля MySQLdb, который вызывал эту ошибку, когда скрипт python запускался из Zabbix.

     cd /usr/local/lib/python2.7/site-packages
     unzip MySQL_python-1.2.3-py2.7-linux-x86_64.egg
     mv MySQL_python-1.2.3-py2.7-linux-x86_64.egg .MySQL_python-1.2.3-py2.7-linux-x86_64.egg
    

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

    Филлип Б Олдхэм прав. Вы можете добавить эти строки в свой код:

     import os os.environ['PYTHON_EGG_CACHE'] = '/tmp' # a writable directory 
     
    Interesting Posts for Van-Lav

    Найти файлы / папки, которые были изменены после определенной даты в Python

    Автоматизация преобразования файлов .ADT Sybase в SQL

    Перенаправление stdout в «ничего» в python

    Как передать несколько переменных из php в скрипт python

    где операторы отображаются в магические методы в python?

    Как распиливать функции / классы, определенные в __main__ (python)

    Графический график 3D-графика Matplotlib с градиентом цвета

    Python Dataframe rolling_sum с номерами, не указанными

    как определить, импортирован ли скрипт python в качестве модуля или запускается как скрипт?

    Формируйте большой массив 2d из нескольких меньших массивов 2d

    Переполнение памяти при сохранении графиков Matplotlib в цикле

    Settting Различные цвета строки ошибок в bar plot в matplotlib

    Управлять круговыми зависимостями в модулях Python?

    Почему некоторые методы списка в Python работают только с определенными переменными?

    pip: работа с несколькими версиями Python?

    Python - лучший язык программирования в мире.