2017-10-17 14 views
0

我试图运行此命令无法安装的virtualenv与“--always拷贝”标志,由于给errno 1

$ virtualenv --always-copy venv 

然后我把所有这些错误:

 shutil.Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_Drag.so', 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/_Drag.so', "[Errno 1] Operation not permitted: 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/_Drag.so'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_Ctl.so', 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/_Ctl.so', "[Errno 1] Operation not permitted: 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/_Ctl.so'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/imageop.so', 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/imageop.so', "[Errno 1] Operation not permitted: 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/imageop.so'"), 
('/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_Scrap.so', 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/_Scrap.so', "[Errno 1] Operation not permitted: 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/_Scrap.so'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_testcapi.so', 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/_testcapi.so', "[Errno 1] Operation not permitted: 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/_testcapi.so'"), 
('/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/unicodedata.so', 
'/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/unicodedata.so', "[Errno 1] Operation not permitted: '/Users/antkong/dev/zeetings/venv/lib/python2.7/lib-dynload/unicodedata.so'"), 

我检查源文件的许可。这是所有可读

$ ls -l '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_Drag.so' 
-rwxr-xr-x 1 root wheel 55936 3 Oct 16:50 /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_Drag.so 

我一直保证VENV运行命令之前不存在。

那么为什么失败呢?

版本信息:

$ python --version 
Python 2.7.10 
$ pip --version 
pip 9.0.1 from /Library/Python/2.7/site-packages (python 2.7) 

回答

2

的virtualenv使用shutil.copytree复制文件,copytree将SRC文件标记复制到目的地,copystat,但MacOS的系统Python文件有一个特殊的标志0x80000,不能由一组普通用户,甚至是root用户。

如果你用自制软件安装了一个python,它没有这个标志,这个命令就可以工作。


更新:

根据 stat.h 0x80000SF_RESTRICTED

,它与约塞米蒂系统完整性保护新的东西。

你可以用ls -lO表现出来:

$ ls -lO '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_Drag.so' 
-rwxr-xr-x 1 root wheel restricted,compressed 55888 Jul 15 12:21 /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_Drag.so 

你可以尝试将其设置在命令行:

$ sudo chflags restricted tmp 
chflags: tmp: Operation not permitted 

我认为,因为没有办法设置蟒蛇shutil.copystat应排除这个标志它在用户区域没有苹果指定的特殊权利。