python-3.x - python3 venv中的PIP安装失败,/tmp文件夹中的权限被拒绝

标签 python-3.x pip virtualenv

似乎有几种方法可以解决相同的错误,我描述的是最典型的。

我在没有 sudo 权限的共享托管服务器上编译了 python 3.6.2(尽管它在 cgi-bin 中运行良好)。后来我发现它也发生在 Ubuntu 16.04 上。我想:

my-python3-path/bin/python3 -m venv my-venv-folder

这最终失败了

Error: Command '['...my-venv-folder/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.



我可以尝试另一种方式:
my-python3-path/bin/python3 -m venv --without-pip my-venv-folder

哪个成功,然后
my-venv-folder/bin/python -m ensurepip

(或以上结果建议的更多选项) - 它无论如何都以:

OSError: [Errno 22] Invalid argument: '/tmp/tmpt2cathtr'



有 pip 高于以以下结尾的堆栈跟踪:

PermissionError: [Errno 13] Permission denied: '/tmp/pip-build-exot00s_'



尽管通过这种方式,所有必要的脚本(例如激活)都是在 pip 之前在 venv 中创建的,并且 pip 文件本身似乎存在并且可以工作,直到我真正尝试安装任何东西。那么类似的错误存在。

TMPDIR似乎没有帮助 - 使用了相同的/tmp 文件夹。

make install 中出现相同或类似的错误顺便一提...

有问题的子文件夹(/tmp 中的子文件夹具有 d-w------- 访问权限,因此无法访问它们也就不足为奇了)。

如果有人遇到此问题,请分享您是否找到解决方案来摆脱它(尽管目前状态最后一个变体看起来像解决方法),因为我未能通过 google 找到解决方案。对不起,如果描述不是很连贯,因为我不是一个 python 人,各种尝试和谷歌搜索让我有 pip 头晕。提前致谢!

UPD : 临时目录似乎是用 rwx 创建的用户的权限,但后来模式变为 -w-rmtree失败。当前的解决方法似乎是注释掉 rmtree在这样的地方打电话(其中几个)......

最佳答案

我想我找到了一个有效的修复/解决方法。

问题是由 /tmp/pip... 的奇怪变化引起的子目录的访问权限 - 它们最终成为“只写”,所以 rmtree在各个阶段被 pip 调用失败了。

我的解决办法是:

  • 设置 venv没有 pip
  • 手动从pypi下载pip包放到venv
  • 修复 rmtree在 pip/utils
  • 使用 pip 安装 setuptools
  • 现在它正在工作(虽然应该通过 python 调用)

  • 这种方法的一个小缺陷是不会自动删除临时文件夹。我要么删除它们(首先递归地修改)或等待重启。

    详细来说是这样的:

    创建 virtualenv 并启动它:
    path-to-python3/bin/python3 -m venv my-venv --without-pip
    source my-venv/bin/activate
    

    让我们切换到应该安装 libs 的目录
    cd my-venv/lib/python3.6/site-packages
    

    下载pip(从官方页面复制链接到.whl https://pypi.python.org/pypi/pip)
    wget https://pypi.python.org/packages/.../pip-9.0.1-py2.py3-none-any.whl
    

    现在提取 pip从中删除目录并删除所有其他内容
    unzip pip-9.0.1...whl
    rm *.whl
    rm -r pip-9.0.1.dist-info
    

    现在打开文件 pip/utils/__init__.py并更改 rmtree 函数的标题:
    nano pip/utils/__init__.py
    

    找到行 def rmtree(dir, ignore_errors=False):并更改 FalseTrue .然后退出 Ctrl-X, Yes .

    为了正常工作 pip 想要安装工具,幸运的是我们现在可以用 pip 本身安装它们:
    python -m pip install setuptools
    

    现在它已准备好用于管理我们需要的一切:
    python -m pip install django
    python -m pip freeze
    

    附言更聪明的方法是在 utils/rmtree 中递归地尝试 chown。

    关于python-3.x - python3 venv中的PIP安装失败,/tmp文件夹中的权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46530900/

    相关文章:

    python - 最接近 python 中的虚拟调用

    python-3.x - 使用表情符号肤色修饰符标记句子或推文

    python - 使用 Virtualenv 在 Ubuntu 上安装 Pip NLTK 问题

    python - PyCharm & Pyenv 本地?

    python - 导入错误: No module named app. core.admin.login

    python - Pygame,从二维 numpy 数组创建灰度

    python - 使用python将日志文件转换为json文件

    python - 如何让pip将包安装到虚拟环境中?

    python - 为什么pip安装tbb失败

    python - Python RuntimeError : failed to find interpreter for Builtin discover of python_spec ='ackages.venvs/lpthw'