Python 在sudo下运行pip安装是否可以接受和安全?

Python 在sudo下运行pip安装是否可以接受和安全?,python,macos,pip,sudo,Python,Macos,Pip,Sudo,我已经开始用我的Mac电脑来安装Python软件包,就像我在工作时使用Windows PC一样;然而,在我的Mac电脑上,我在写入日志文件或网站包时经常遇到权限被拒绝的错误 因此,我考虑在sudo下运行pip-install,但考虑到我只想在当前用户帐户下安装sudo,这是安全/可接受的sudo使用方式吗 日志文件I/O错误的回溯示例: Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/

我已经开始用我的Mac电脑来安装Python软件包,就像我在工作时使用Windows PC一样;然而,在我的Mac电脑上,我在写入日志文件或网站包时经常遇到权限被拒绝的错误

因此,我考虑在
sudo
下运行
pip-install
,但考虑到我只想在当前用户帐户下安装sudo,这是安全/可接受的sudo使用方式吗

日志文件I/O错误的回溯示例:

Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 8, in <module>
    load_entry_point('pip==1.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
    return command.main(args[1:], options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
    log_fp = open_logfile(log_fn, 'w')
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
    log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'
Command/usr/bin/python-c“导入setuptools;uuu文件uuu=”/Users/markwalker/build/pycrypto/setup.py';exec(编译(打开(uu文件uuu).read().replace('\r\n','\n'),u文件uuu,'exec'))安装--外部管理的单一版本--record/var/folders/tq/hy1fz_4j27v6rstzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt失败,错误代码为/Users/markwalker/build/pycrypto中的1
存储完整的登录/Users/markwalker/Library/Logs/pip.log
回溯(最近一次呼叫最后一次):
文件“/usr/local/bin/pip”,第8行,在
加载入口点('pip==1.1','console\u scripts','pip')()
文件“/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/_init___;u.py”,第116行,在main中
return命令.main(args[1:],选项)
文件“/Library/Python/2.7/site packages/pip-1.1-py2.7.egg/pip/basecommand.py”,第141行,在main中
log\u fp=打开日志文件(log\u fn,'w')
文件“/Library/Python/2.7/site packages/pip-1.1-py2.7.egg/pip/basecommand.py”,第168行,在open_日志文件中
log_fp=打开(文件名,模式)
IOError:[Errno 13]权限被拒绝:'/Users/markwalker/Library/Logs/pip.log'
更新 这可能取决于权限,但是最好的方法是为python项目使用虚拟环境。除非绝对必要,否则应避免运行sudo pip。

使用:

当您想要安装全局、系统范围的Python安装时,您只能使用
sudo
或提升权限

最好使用为您隔离软件包的虚拟环境。这样,您就可以在不污染全局python安装的情况下进行操作


另外,virtualenv不需要提升权限。

看起来您的权限被搞乱了。在终端中键入
chown-R markwalker
,然后再次尝试
pip
?如果您已排序,请告诉我。

因为我遇到了相同的问题,我想强调的是,实际上的第一条注释是“IOError:[Errno 13]”问题的解决方案-问题:

如果在temp目录(
cd/tmp
)中执行,则如果运行
sudo pip install foo
,IOError不再发生

sudo
下运行
pip安装是否可以接受且安全

这是不安全的,人们对它皱眉——看到了吗
要在主目录中安装Python包,您不需要root权限。请参阅pip的
--user
选项。

您最初的问题是pip无法将日志写入文件夹

IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'
您需要将cd放入一个文件夹中,在该文件夹中调用的进程可以像
/tmp
那样写入,因此
cd/tmp
并重新调用该命令可能会起作用,但这不是您想要的

但是实际上,对于这种特殊情况(您不想使用
sudo
安装python软件包),并且不需要全局软件包安装,您可以使用
--user
标志,如下所示:

pip install --user <packagename>
或者更一般地说

chown -R $USER <path to your global pip packages>
chown-R$USER

在成功安装
virtualenv
后,我在安装
virtualenvwrapper
时遇到问题

我的终端在我这样做后抱怨:

pip install virtualenvwrapper
因此,我尝试了以下方法(不推荐):

然后,我成功地安装了它:

pip install --user virtualenvwrapper

我发现,'
cd/tmp;sudo-pip-install-foo(sudo-pip-install-foo)
“是一个足够的解决方法。可能重复@pradyunsg为什么要标记这样一个老问题?本质上,当前被接受的答案(以及问题中的更新)建议运行“sudo-pip”——这是pip的维护人员(我自己就是其中之一)应该做的事情主动告诉人们不要这样做,因为这可能会破坏MacOS和许多(所有?)主要Linux发行版上的操作系统。我在这里登陆时使用的术语是,有人调试他们的情况,可能只是想让人们重定向到一个有更好建议的位置。我没有考虑过实际提出这个问题,它的答案更符合上述陈述。(超过个字符)@markwalker_u您是否愿意从问题中删除该建议,并可能将其替换为更好的建议(使用--user或virtualenv)?如果他的主目录权限混乱,使用virtualenv可能对他没有帮助是的,会,但已经发生了,所以他需要在继续之前修复它。谢谢大家,我以前读过关于virtualenv的文章,所以希望这两个解决方案结合起来能让我回到正轨:)另外,要安装virtualenv,你们需要sudo。。。还是有解决办法?我不明白为什么这是最好的答案。问题不在于虚拟环境。这是关于使用
sudopip安装的有效性的问题。假设我需要安装一些软件包,我将在许多项目或系统级别使用这些软件包。例如一些CLI工具,如
pgcli
。显然,我不需要虚拟环境,我想在全球范围内安装它。我应该使用
sudopip安装
还是有一些更正确的做法?这就是问题所在。虽然这可以解决权限问题,但它不能回答问题。解决我不知道的问题是一种奖励
chown
正在对许多隐藏的dir(如
.shsh
)执行
不允许的操作
&我假设它正在处理它现在可以设置的文件,但我会看到cli提示符返回时会发生什么。您是否有机会解释为什么这会为您解决问题?您仍然是我们
pip install virtualenvwrapper
sudo pip install virtualenvwrapper
pip install --user virtualenvwrapper