似乎有几种方法可以解决相同的错误,我描述的是最典型的。
我在没有 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 rmtree
在 pip/utils 这种方法的一个小缺陷是不会自动删除临时文件夹。我要么删除它们(首先递归地修改)或等待重启。
详细来说是这样的:
创建 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):
并更改 False
至 True
.然后退出 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/