【问题标题】:error: [Errno 1] Operation not permitted: '/usr/bin/pyobfuscate' MacOS Sierra错误:[Errno 1] 不允许操作:'/usr/bin/pyobfuscate' MacOS Sierra
【发布时间】:2017-09-21 20:41:59
【问题描述】:

我正在尝试使用以下命令在我的 macOS Sierra 上安装 pyobfuscate:https://github.com/astrand/pyobfuscatepython setup.py install,但出现以下错误:

running install
running build
running install_data
copying pyobfuscate -> /usr/bin
error: [Errno 1] Operation not permitted: '/usr/bin/pyobfuscate'

我也尝试过使用sudo,但我得到了完全相同的错误。

【问题讨论】:

  • 您可能没有对该目录的写入权限。您可以使用sudo 来提升您的权限。
  • @AChampion 我也尝试过使用sudo,但同样的错误
  • 简单的答案是在你的主目录中设置一个 virtualenv,这样/usr/bin 就不会被修改。
  • 参见 Mac OS don't have permission to usr/bin folder at all -- 因为 El Capitan,/usr/bin 是完全只读的,除非系统完整性保护被禁用。
  • 也就是说,如果setup.py install 所做的只是复制此二进制文件,您是否考虑将其复制到其他地方——比如/usr/local/bin?

标签: python macos


【解决方案1】:

一般情况下:在当前的 MacOS(只读)上避免使用 /usr/bin

/usr/bin 在新版本的 MacOS 上不可写,即使是 root 用户,除非系统完整性保护已被禁用。考虑:

sudo python setup.py install --prefix=/usr/local

另一个根本不需要sudo 的选项是使用virtualenv:

virtualenv ~/pyobfuscate.venv     ## create a virtualenv
. ~/pyobfuscate.venv/bin/activate ## activate that virtualenv
python setup.py install           ## install pyobfuscate in that virtualenv

...然后,. ~/pyobfuscate.venv/bin/activate 在给定的 shell 中运行,然后在该 shell 中运行 pyobfuscate。


但是 pyobfuscate 的 setup.py 需要先修复才能执行此操作:

也就是说,当前版本的 pyobfuscate 的 setup.py 写法如下:

data_files=[('/usr/bin', ['pyobfuscate'])]

这是不合适的,应该是:

scripts=['pyobfuscate']

...它将遵循给定的前缀,无论是通过 virtualenv 还是 --prefix= 参数。

【讨论】:

  • 我尝试使用sudo,但没有成功,因为它尝试写入/usr/bin/pyobfuscate 而不是/usr/local/bin/pyobfuscate
  • 啊。阅读setup.py,我明白它为什么不起作用——答案已正确编辑。
【解决方案2】:

在setup.py里面替换

data_files=[('/usr/bin', ['pyobfuscate'])]

与

scripts=['pyobfuscate']

【讨论】:

    猜你喜欢
    • 2018-10-26
    • 2016-01-06
    • 2020-03-26
    • 2017-06-27
    • 2020-02-17
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多