Вопрос

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

Не могу извлечь файл (ы) в кэш яиц

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

Errno 13] Разрешение запрещено: '/var/www/.python-eggs

Каталог кеша Python Egg в настоящее время устанавливается:

/var/www/.python-eggs.

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

В Python Docs. Таким образом, я немного потерей в отношении лучших практик, где поставить этот каталог и то, для чего он используется.

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

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

Это было полезно?

Решение

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

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

Есть ряд исправлений:

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

Другие советы

Кеш для яиц Python - это просто каталог, используемый SetUpeWools для хранения установленных пакетов, который соответствует Спецификация яйца. Отказ Ты сможешь Узнайте больше о Seturgools здесь.

Кроме того, в качестве сообщения об ошибке предусматривают, вы можете указать другой каталог Cache Cache яйца, установив Python_egg_cache = / ue / out / dir. Самый простой способ сделать это - это установить его в вашем ~ / .bash_profile (предполагая, что вы используете bash), как это:

export PYTHON_EGG_CACHE=/some/other/dir

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

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

Яйца являются пакетами (каталог, полный файлов), упакованный в один .egg Файл для упрощения деполимента.

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

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

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

Так что вы можете либо

  • задавать PYTHON_EGG_DIR к /tmp, или

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

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

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

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

Вот пример того, что я сделал, чтобы отключить модуль MySQLDB .egg файл, который вызывал эту ошибку, когда сценарий 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

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

import os  
os.environ['PYTHON_EGG_CACHE'] = '/tmp' # a writable directory 

Простое исправление было бы созданию каталога и предоставить www-data доступ к нему.

$ mkdir /var/www/.python-eggs
$ chown www-data:www-data /var/www/.python-eggs
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top