Rod*_*nko 6 pip virtualenv python-3.x
似乎有几种方法可以解决相同的错误,我描述的是最典型的。
我在没有 sudo 权限的共享托管服务器上编译了 python 3.6.2(尽管它在 cgi-bin 中运行良好)。后来我发现它也发生在 Ubuntu 16.04 上。我想:
my-python3-path/bin/python3 -m venv my-venv-folder
Run Code Online (Sandbox Code Playgroud)
这最终失败了
错误:命令 '['...my-venv-folder/bin/python3'、'-Im'、'ensurepip'、'--upgrade'、'--default-pip']' 返回非零退出状态1.
我可以尝试另一种方式:
my-python3-path/bin/python3 -m venv --without-pip my-venv-folder
Run Code Online (Sandbox Code Playgroud)
哪个成功,然后
my-venv-folder/bin/python -m ensurepip
Run Code Online (Sandbox Code Playgroud)
(或以上结果建议的更多选项) - 它无论如何都以:
OSError: [Errno 22] 无效参数: '/tmp/tmpt2cathtr'
有点高于以以下结尾的堆栈跟踪:
PermissionError: [Errno 13] 权限被拒绝: '/tmp/pip-build-exot00s_'
尽管通过这种方式,所有必要的脚本(例如激活)都是在 pip 之前在 venv 中创建的,并且 pip 文件本身似乎存在并且可以正常工作,直到我真正尝试安装任何东西为止。那么类似的错误存在。
更改TMPDIR似乎没有帮助 - 使用相同的 /tmp 文件夹。
make install顺便说一下,同样或类似的错误发生了......
有问题的子文件夹(其中的子文件夹/tmp具有d-w-------访问权限,因此无法访问它们也就不足为奇了)。
如果有人遇到此问题,请分享您是否找到解决方案来摆脱它(尽管目前状态最后一个变体看起来像解决方法),因为我未能通过 google 找到解决方案。对不起,如果描述不是很连贯,因为我不是一个蟒蛇人,各种尝试和谷歌搜索让我有点头晕。提前致谢!
UPD:似乎发生临时目录是rwx为用户创建的,但后来模式变为-w-并rmtree失败。当前的解决方法似乎是rmtree在这些地方(其中几个)注释掉电话......
我想我已经找到了有效的修复/解决方法。
问题是由/tmp/pip...子目录访问权限的奇怪变化引起的 - 它们最终变成“只写”,因此rmtreepip 在各个阶段调用都会失败。
我的解决方案是:
venv没有 pip的设置rmtree在 pip/utils 中修复这种方法的一个小缺陷是临时文件夹不会自动删除。我要么删除它们(首先递归修改),要么等待重新启动。
详细来说是这样的:
创建 virtualenv 并启动它:
path-to-python3/bin/python3 -m venv my-venv --without-pip
source my-venv/bin/activate
Run Code Online (Sandbox Code Playgroud)
让我们切换到应该安装库的目录
cd my-venv/lib/python3.6/site-packages
Run Code Online (Sandbox Code Playgroud)
.whl下载pip(从官方页面复制链接https://pypi.python.org/pypi/pip)
wget https://pypi.python.org/packages/.../pip-9.0.1-py2.py3-none-any.whl
Run Code Online (Sandbox Code Playgroud)
现在pip从中提取目录并删除所有其他内容
unzip pip-9.0.1...whl
rm *.whl
rm -r pip-9.0.1.dist-info
Run Code Online (Sandbox Code Playgroud)
现在打开文件pip/utils/__init__.py并更改 rmtree 函数的标题:
nano pip/utils/__init__.py
Run Code Online (Sandbox Code Playgroud)
找到该行def rmtree(dir, ignore_errors=False):并更改False为True。然后使用 退出Ctrl-X, Yes。
为了正常工作,pip 需要安装工具,幸运的是我们现在可以使用 pip 本身安装它们:
python -m pip install setuptools
Run Code Online (Sandbox Code Playgroud)
现在它已准备好用于管理我们需要的一切:
python -m pip install django
python -m pip freeze
Run Code Online (Sandbox Code Playgroud)
PS 更智能的方法是尝试在 utils/rmtree 内递归地执行 chown。
| 归档时间: |
|
| 查看次数: |
1999 次 |
| 最近记录: |