似乎有几种方法可以达到相同的错误,我描述的是最典型的错误。
我在共享主机服务器上编译了python 3.6.2,我没有sudo权限(尽管它在cgi-bin中运行良好)。后来我发现它也发生在Ubuntu 16.04上。我在尝试:
my-python3-path/bin/python3 -m venv my-venv-folder
最后以
结束错误:命令'['... my-venv-folder / bin / python3',' - Im','ensurepip',' - upgrade',' - default-pip']'返回非零退出状态1.
我可以尝试另一种方式:
my-python3-path/bin/python3 -m venv --without-pip my-venv-folder
成功,然后
my-venv-folder/bin/python -m ensurepip
(或上面结果建议的更多选项) - 无论如何都以:
结束OSError:[Errno 22]参数无效:'/ tmp / tmpt2cathtr'
并且稍高于以:
结尾的堆栈跟踪PermissionError:[Errno 13]权限被拒绝:'/ tmp / pip-build-exot00s _'
虽然这样所有必要的脚本(例如激活)都是在pip之前在venv中创建的,而pip文件本身似乎存在并且正常工作,直到我真的尝试安装任何东西。然后存在类似的错误。
更改TMPDIR
似乎没有帮助 - 使用相同的/ tmp文件夹。
顺便说一句make install
期间发生了相同或类似的错误......
有问题的子文件夹(/tmp
中的子文件夹具有d-w-------
访问权限,因此难怪无法访问它们。
如果有人遇到这个问题,请分享一下,如果你找到解决办法摆脱它(虽然目前状态最后一个变种看起来像变通办法),因为我没有找到谷歌的解决方案。对不起,如果描述不是很连贯,因为我不是蟒蛇人,各种尝试和谷歌搜索让我有点头晕。提前谢谢!
UPD :似乎是为用户创建了rwx
权限的临时目录,但稍后该模式变为-w-
和rmtree
失败。当前的解决方法似乎是在这些地方(其中几个)注释掉rmtree
次来电......
答案 0 :(得分:1)
我认为我找到了一个有效的修复/解决方法。
问题是由/tmp/pip...
子目录中的奇怪变化引起的。访问权限 - 他们最终成为"只写"因此pip在各个阶段被调用rmtree
失败了。
我的解决方案是:
venv
,无需点击rmtree
此方法的一个小缺陷是不会自动删除临时文件夹。我要么删除它们(先递归chmodding),要么等待重启。
详细信息如下:
创建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
从官方页面https://pypi.python.org/pypi/pip下载pip(从.whl
复制链接)
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想拥有setuptools,幸运的是我们现在可以用pip本身安装它们:
python -m pip install setuptools
现在可以用它来管理我们需要的所有东西:
python -m pip install django
python -m pip freeze
P.S。更智能的方法是在utils / rmtree中递归地尝试chown。
答案 1 :(得分:0)
Python 3.6.4似乎解决了这个问题。