python - 由于 Errno 1,无法使用 '--always-copy' 标志设置 virtualenv

标签 python macos python-2.7 macos-high-sierra

我正在尝试运行这个命令

$ 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)

最佳答案

virtualenv 使用shutil.copytree 复制文件,copytree 会使用copystat 将src 文件flags 复制到目的地,但是macOS 系统python 文件有一个特殊的标志 0x80000,普通用户无法设置,即使是 root。

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


更新:

根据 stat.h 0x80000SF_RESTRICTED:

#define SF_RESTRICTED   0x00080000  /* restricted access */

这是 Yosemite 系统完整性保护的新功能。

您可以在 ls -lO 输出中看到 restricted 标志:

$ 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

我认为 python shutil.copystat 应该排除这个标志,因为如果没有 Apple 分配的特殊权利,就无法在用户空间中设置它。

关于python - 由于 Errno 1,无法使用 '--always-copy' 标志设置 virtualenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46781050/

相关文章:

python - 如何处理我的 UnicodeDecodeError?

python - 如何获取模块中的所有变量,但不包括在该模块中导入的变量

python - 计算数字

python - 如何阻止pyplot弹出数字

swift - 如何使 MacOS 窗口不可调整大小而是切换大小?

macos - Mac的Mvvmcross和Mac的插件支持(例如sqlite)?

python - 如何在Python PyQt4中设置现有MainWidnow的中央小部件?

python - 从一个 excel 添加带有合并单元格的标题并插入到另一个 excel Pandas

python noob 在发送谷歌语音文本时遇到问题

cocoa - cocoa 和Photoshop之间的颜色差异