【问题标题】:Installation using pip in virtualenv on CentOS encounters segmentation fault在 CentOS 上使用 pip 在 vi​​rtualenv 中安装遇到分段错误
【发布时间】:2016-05-27 14:11:30
【问题描述】:

我在 VM 上安装了 Linux CentOS 6.7。几个月前,我有 - 在其上编译并安装 Python 2.7.8 - 在 /usr/lib/python2.7/site-packages 中安装了 virtualenv-13.1.2 - 在 vi​​rtualenv 中安装了 Django 1.7。 - 编译并安装 mod_wsgi 4.4.21 并使用它在 Apache 上部署 Django

过去几个月我一直在使用它,没有任何问题。

我现在正在尝试升级到 Django 1.8.8。我激活了virtualenv,然后执行了下面的命令,但是每次都遇到segmentation fault。

$pip2.7 install --upgrade django==1.8.8

Collecting django==1.8.8

/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/sitepackages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Downloading Django-1.8.8-py2.py3-none-any.whl (6.2MB)
99% |############################### | 6.2MB 9.1MB/s eta 0:00:01Segmentation fault

如果我在命令前加上 sudo,则没有分段错误,但它根本不会继续安装新版本的 Django。

有什么想法可能会出错吗?

编辑:

下面给出的详细输出的输出 pip2.7 install --upgrade django==1.8.8 -v

Collecting django==1.8.8
Getting page https://pypi.python.org/simple/django/
Starting new HTTPS connection (1): pypi.python.org
/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-    packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
"GET /simple/django/ HTTP/1.1" 200 3985
1 location(s) to search for versions of django:
* https://pypi.python.org/simple/django/
Getting page https://pypi.python.org/simple/django/
"GET /simple/django/ HTTP/1.1" 200 3985
Analyzing links from page https://pypi.python.org/simple/django/
Found link https://pypi.python.org/packages/any/D/Django/Django-1.5.2-py2.py3-none-any.whl#md5=07f0d2d42162945d0ad031fc9737847d (from https://pypi.python.org/simple/django/), version: 1.5.2
Found link https://pypi.python.org/packages/any/D/Django/Django-1.5.8-py2.py3-none-any.whl#md5=1e3418bd1d6f9725a3d1264c9352f2a1 (from https://pypi.python.org/simple/django/), version: 1.5.8
Found link https://pypi.python.org/packages/any/D/Django/Django-1.6.1-py2.py3-none-any.whl#md5=c7b7a4437b36400f1c23953e9700fd29 (from https://pypi.python.org/simple/django/), version: 1.6.1
Found link https://pypi.python.org/packages/any/D/Django/Django-1.6.2-py2.py3-none-any.whl#md5=3bd014923e85df771b34d12c0ab3c9e1 (from https://pypi.python.org/simple/django/), version: 1.6.2
Found link https://pypi.python.org/packages/any/D/Django/Django-1.6.5-py2.py3-none-any.whl#md5=2bcdb4729f9f358b0925b532eef0a8ff (from https://pypi.python.org/simple/django/), version: 1.6.5
..................................
Found link https://pypi.python.org/packages/source/D/Django/Django-1.8.8.tar.gz#md5=08ecf83b7e9d064ed7e3981ddc3a8a15 (from https://pypi.python.org/simple/django/), version: 1.8.8
Found link https://pypi.python.org/packages/source/D/Django/Django-1.8.9.tar.gz#md5=49f6863b1c83825fb2f473c141c28e15 (from https://pypi.python.org/simple/django/), version: 1.8.9
Found link https://pypi.python.org/packages/source/D/Django/Django-1.8.tar.gz#md5=9a811faf67ca0f3e0d43e670a1cc503d (from https://pypi.python.org/simple/django/), version: 1.8
Found link https://pypi.python.org/packages/source/D/Django/Django-1.9.1.tar.gz#md5=02754aa2d5c9c171dfc3f9422b20e12c (from https://pypi.python.org/simple/django/), version: 1.9.1
Found link https://pypi.python.org/packages/source/D/Django/Django-1.9.2.tar.gz#md5=ee90280973d435a1a6aa01b453b50cd1 (from https://pypi.python.org/simple/django/), version: 1.9.2
Found link https://pypi.python.org/packages/source/D/Django/Django-1.9.tar.gz#md5=110389cf89196334182295165852e082 (from https://pypi.python.org/simple/django/), version: 1.9
Found link https://pypi.python.org/packages/source/D/Django/Django-1.9rc1.tar.gz#md5=b971686521ea09b4bf82aec3e794fcbc (from https://pypi.python.org/simple/django/), version: 1.9rc1
Using version 1.8.8 (newest of versions: 1.8.8, 1.8.8)
"GET /packages/py2.py3/D/Django/Django-1.8.8-py2.py3-none-any.whl HTTP/1.1" 200 6170205
Downloading Django-1.8.8-py2.py3-none-any.whl (6.2MB)
Downloading from URL https://pypi.python.org/packages/py2.py3/D/Django/Django-1.8.8-py2.py3-none-any.whl#md5=97334c82efbac0f93f8b6dd4ee4b516f (from https://pypi.python.org/simple/django/)
99% |############################### | 6.2MB 4.8MB/s eta 0:00:01Segmentation fault

如果我尝试升级到版本 1.7.11,我会得到相同的结果(尝试查看 Python 2.7.8 和 Django 1.8.x 之间是否存在任何不兼容)。

如果我尝试安装任何其他软件包,我也会得到相同的结果。所以这不是 Django 特有的问题,可能与 pip 和 virtualenv 有关?

我现在创建了一个名为 syt_env 的新虚拟环境,将其激活并尝试重新安装 Django。现在遇到不同的错误。请注意,它似乎仍在尝试安装在名为 vishwaas_env 的旧虚拟环境中。

Collecting Django==1.8.8 (from -r requirements/base.txt (line 1))
Exception:
Traceback (most recent call last):
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/basecommand.py", line 211, in main
status = self.run(options, args)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/commands/install.py", line 305, in run
wb.build(autobuilding=True)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/wheel.py", line 705, in build
self.requirement_set.prepare_files(self.finder)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/req/req_set.py", line 334, in prepare_files
functools.partial(self._prepare_file, finder))
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/req/req_set.py", line 321, in _walk_req_to_install
more_reqs = handler(req_to_install)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/req/req_set.py", line 461, in _prepare_file
req_to_install.populate_link(finder, self.upgrade)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/req/req_install.py", line 250, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/index.py", line 486, in find_requirement
all_versions = self._find_all_versions(req.name)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/index.py", line 404, in _find_all_versions
index_locations = self._get_index_urls_locations(project_name)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/index.py", line 378, in _get_index_urls_locations
page = self._get_page(main_index_url)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/index.py", line 818, in _get_page
return HTMLPage.get_page(link, session=self.session)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/index.py", line 928, in get_page
"Cache-Control": "max-age=600",
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/_vendor/requests/sessions.py", line 477, in get
return self.request('GET', url, **kwargs)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/download.py", line 373, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/_vendor/requests/sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/_vendor/requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/adapter.py", line 36, in send
cached_response = self.controller.cached_request(request)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.py", line 102, in cached_request
resp = self.serializer.loads(request, self.cache.get(cache_url))
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/serialize.py", line 108, in loads
return getattr(self, "_loads_v{0}".format(ver))(request, data)
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/serialize.py", line 170, in _loads_v2
cached["response"]["body"]
File "/home/syt_admin/.virtualenvs/vishwaas_env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/serialize.py", line 20, in _b64_decode_bytes
return base64.b64decode(b.encode("ascii"))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2662: ordinal not in range(128)

【问题讨论】:

  • 猜想,正如你所说,你应该使用 sudo 但你不在你的虚拟环境中,或者你没有激活你的虚拟环境。所以Django1.8是全局安装的,这不会影响你的virtualenv
  • 那么我如何使用 sudo 并且仍然在虚拟环境中安装它?
  • 我猜首先你必须激活 virtualenv (.venv/bin/activate) 和不带 sudo 的 pip 命令,也可以尝试 pip freeze 命令检查你在 virtualenv 中的包。
  • 我确实激活了 virtualenv 并在虚拟环境中执行了 pip2.7 命令。 Django 1.8.8 包已下载,但在下载完成后立即遇到分段错误。如果我留在 virtualenv 中并执行“sudo pip2.7 install ....”它会下载包然后什么都不做。
  • @Tanuka 抱歉,您是对的,当您安装到虚拟环境中时,您不需要 sudo。你试过不同的 Django 版本吗?

标签: python linux django pip


【解决方案1】:

好的,所以错误变成了 pip 版本 7.1.2 的一个已知问题。

https://github.com/pypa/pip/issues/2674

https://github.com/pypa/pip/issues/3245

使用带有选项 --no-cache-dir 调用 pip2.7 的解决方法,并且能够在新的 virtualenv 中安装所有必需的包,并在早期的 virtualenv 中升级旧包。

pip2.7 install --upgrade django==1.8.8 --no-cache-dir

【讨论】:

    【解决方案2】:

    在此处粘贴输出:

    pip2.7 install --upgrade django==1.8.8 -v
    

    -v, --verbose 提供更多输出。选项是累加的,最多可以使用 3 次。

    顺便说一句,有更新版本的 Django [1.8.9]

    【讨论】:

    • 编辑了问题以包含此输出。其他版本的 Django 也会出现分段错误。
    • 试试:pip install -U pip
    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多