Programing

파이썬 에그 캐시 (PYTHON_EGG_CACHE) 란 무엇입니까?

lottogame 2020. 10. 30. 07:38
반응형

파이썬 에그 캐시 (PYTHON_EGG_CACHE) 란 무엇입니까?


개발 컴퓨터에서 Python 2.6.1에서 2.6.4로 방금 업그레이드했으며 Python 스크립트를 시작하면 다음 메시지가 표시되었습니다.

에그 캐시로 파일을 추출 할 수 없습니다.

Python 달걀 캐시에 파일을 추출하는 동안 다음 오류가 발생했습니다.

[Errno 13] 권한 거부 됨 : '/var/www/.python-eggs'

Python egg 캐시 디렉토리는 현재 다음과 같이 설정되어 있습니다.

/var/www/.python-eggs

아마도 귀하의 계정에이 디렉토리에 대한 쓰기 권한이 없습니까? 액세스 가능한 디렉토리를 가리 키도록 PYTHON_EGG_CACHE 환경 변수를 설정하여 캐시 디렉토리를 변경할 수 있습니다.

파이썬 문서 에는 아무것도 없기 때문에이 디렉토리를 어디에 넣을지, 그리고 무엇을 위해 사용하는지에 대한 모범 사례와 관련하여 약간의 손실이 있습니다.

누군가 파이썬 달걀 캐시가 무엇인지 설명 할 수 있습니까?

또한 site-packages파이썬이 계란을 저장하는 데 사용 하는 디렉토리 와 다른 이유 / 어떻게 설명 할 수 있습니까?


내 조사에서 일부 계란은 zip 파일로 패키지되어 Python의 site-packages디렉토리 에 저장되는 것으로 나타났습니다 .

이 압축 된 달걀은 실행되기 전에 압축을 풀어야하므로 PYTHON_EGG_CACHE기본적으로 ~/.python-eggs(사용자의 홈 디렉토리에있는) 디렉토리 로 확장됩니다 . 이것이 존재하지 않으면 응용 프로그램을 실행할 때 문제가 발생합니다.

여러 가지 수정 사항이 있습니다.

  1. 크리에이트 .python-eggs사용자의 홈 디렉토리에있는 디렉토리를하고 사용자에게 쓰기 가능합니다.
  2. 압축 해제를위한 전역 디렉토리 (예 :)를 /tmp/python-eggs만들고 환경 변수 PYTHON_EGG_CACHE를이 디렉토리로 설정합니다 .
  3. 사용할 때 -Z스위치를 사용하여 easy_install설치할 때 패키지의 압축을 풉니 다.

파이썬 에그 캐시는 단순히 에그 사양 을 준수하는 설치된 패키지를 저장하기 위해 setuptools에서 사용하는 디렉토리 입니다. 여기에서 setuptools에 대해 자세히 읽을 수 있습니다 .

또한 오류 메시지에 나와 있듯이 PYTHON_EGG_CACHE = / some / other / dir을 설정하여 환경에서 다른 에그 캐시 디렉토리를 지정할 수 있습니다. 이를 수행하는 가장 쉬운 방법은 다음과 같이 ~ / .bash_profile (bash를 사용한다고 가정)에 설정하는 것입니다.

export PYTHON_EGG_CACHE=/some/other/dir

웹 애플리케이션을 사용하는 경우 Apache 환경에서 설정해야 할 수 있습니다.


이것은 다른 좋은 계란 메커니즘을 사용하는 어두운 부작용입니다.

Eggs는 .eggdepolyment를 단순화하기 위해 하나의 파일로 포장 된 패키지 (파일로 가득 찬 디렉토리) 입니다.

그들은 /site-packages/dir 에 저장됩니다 .

계란에 저장된 .py파일 파일이면 훌륭하게 작동합니다. 파이썬 가져 오기는 일반 파일처럼 모든 파일 류 객체에서 가져올 수 있습니다.

그러나 그런 .so일이 발생하면 파이썬은 기본 OS에 물리적 이름이없는 라이브러리를로드하고 싶다고 설명 할 수 없습니다. distutils 작성자가 생각한 유일한 해결 방법은 임시 디렉토리에 압축을 푸는 것입니다. 당연히 일반 사용자가 쓸 수 없기 /site-packages/때문에 /site-packages/그렇지 않습니다.

그래서 당신은

  • 설정 PYTHON_EGG_DIR하기 위해 /tmp, 또는

  • 사용자 줄 www에 쓰기 권한 /var/www/.python-eggs
    (그래서 파일이 / tmp에 정리 될 때마다 압축을 푼되지 않는 것이) 더 나은 다음 또는

  • @ shalley303이 제안한대로 계란의 압축을 풉니 다
    (그리고 런타임에 계란의 압축을 완전히 풉니 다 ).


Python egg는 Python 모듈과 메타 데이터를 모두 포함하는 zip 압축 패키지입니다. 에그 캐시는 에그의 추출 된 내용이 저장되어 포함 된 Python 모듈을 사용할 수있는 곳입니다.


.egg를 설치 한 후 사용을 비활성화 할 수도 있습니다. site-packages 디렉토리로 이동하여 .egg를 추출한 다음 숨겨진 파일로 이동 (또는 삭제 등)해야합니다.

다음은 Zabbix에서 Python 스크립트를 실행할 때이 오류를 일으키는 MySQLdb 모듈 .egg 파일을 비활성화하기 위해 수행 한 작업의 예입니다.

cd /usr/local/lib/python2.7/site-packages
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

Phillip B Oldham의 말이 맞습니다. 코드에 다음 줄을 추가 할 수 있습니다.

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

참고 URL : https://stackoverflow.com/questions/2192323/what-is-the-python-egg-cache-python-egg-cache

반응형