Phi*_*ham 71 python python-egg-cache
我刚刚在我的开发机器上从Python 2.6.1升级到2.6.4,并在启动python脚本时显示以下消息:
无法将文件提取到egg缓存中
尝试将文件提取到Python egg缓存时发生以下错误:
[Errno 13]权限被拒绝:'/ var/www/.python-eggs'
Python egg缓存目录当前设置为:
/var/www/.python-eggs
也许您的帐户没有对此目录的写入权限?您可以通过将PYTHON_EGG_CACHE环境变量设置为指向可访问的目录来更改缓存目录.
python文档中没有任何内容,所以我对于放置此目录及其用途的最佳实践有点不知所措.
有人可以解释一下Python egg缓存是什么吗?
另外,你能解释为什么/如何与site-packages
Python用来存储鸡蛋的目录不同(据我所知)?
Phi*_*ham 66
根据我的调查,事实证明有些鸡蛋被打包为zip文件,并在Python的site-packages
目录中保存.
这些压缩的鸡蛋需要在执行之前解压缩,因此会扩展到PYTHON_EGG_CACHE
默认目录~/.python-eggs
(位于用户的主目录中).如果不存在,则在尝试运行应用程序时会导致问题.
有很多修复:
.python-eggs
在用户的主目录中创建一个目录,并使其可供用户写入./tmp/python-eggs
)并将环境变量PYTHON_EGG_CACHE
设置为此目录.-Z
时easy_install
用于解压缩包时使用开关.AJ.*_*AJ. 30
python egg缓存只是setuptools用来存储符合egg规范的软件包的目录.您可以在此处阅读有关setuptools的更多信息.
此外,正如错误消息所述,您可以通过设置PYTHON_EGG_CACHE =/some/other/dir在您的环境中指定不同的egg cache目录.最简单的方法是在〜/ .bash_profile中设置它(假设你正在使用bash),如下所示:
export PYTHON_EGG_CACHE=/some/other/dir
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Web应用程序,则可能需要在Apache环境中进行设置.
Ant*_*ins 12
这是使用其他漂亮的鸡蛋机制的黑暗副作用.
鸡蛋是打包到一个.egg
文件中的包(一个充满文件的目录),以简化解除.
它们存储在/site-packages/
目录中.
只要存储在egg中的.py
文件是文件就可以了.Python导入可以从任何类似文件的对象导入内容,就像它是普通文件一样.
但是,当有类似的.so
事情发生在那里时,python无法向底层操作系统解释它想要加载一个没有物理名称的库.作者所想到的唯一解决办法就是将其解压缩为临时目录.当然这不是/site-packages/
因为/site-packages/
是不可写的普通用户.
所以你也可以
设置PYTHON_EGG_DIR
为/tmp
,或
授予用户www
写入权限/var/www/.python-eggs
(以便每次/ tmp清理时都不会解压缩文件)或更好
按照@ shalley303的建议解压缩鸡蛋
(并避免在运行时完全解压缩鸡蛋).