【问题标题】:uWSGI runs wrong version of PythonuWSGI 运行错误的 Python 版本
【发布时间】:2013-12-11 22:20:18
【问题描述】:

我的 django/uwsgi/python 因分段错误而崩溃,因为 uWSGI 显然正在加载不同版本的 Python。

我刚刚使用 pip 安装了 uWSGI。这个SO question 解决了一个涉及从源代码编译的解决方案,但我想避免这种情况。

mihai$ /usr/bin/python
Python 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Segmentation fault: 11

mihai$ /usr/local/bin/python
Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>

有什么建议吗?

我希望有一些 --flag 可以告诉 uWSGI 使用哪个版本的 python...

【问题讨论】:

    标签: python django version pip uwsgi


    【解决方案1】:

    遗憾的是,如果编译它的 python 是错误的,你必须重新编译它。 由于它直接链接到 Python,因此如果您使用的是不同的 Python,则符号将不匹配。

    在您提到的 cmets 中,您使用了 pip 但没有获得正确的 Python 版本。也许您使用了错误的点子?例如,在 Ubuntu 上,您有 Python 2.7 和 3.3。有一个 pip-2.7 和一个 pip-3.3。如果您使用的是 virtualenv,请确保您使用来自 virtualenv 的 pip 进行安装。

    【讨论】:

    • 感谢您的回复。重新编译是什么意思 - 从头开始​​构建而不是 pip?我尝试用 pip 重新安装但没有成功 - 还有其他解决方法吗?也许如果我删除有问题的 python 版本,然后用 pip 重新安装 uwsgi?
    • 解释你如何拥有多个 Python 版本。这将有助于找出正确的解决方案。
    • 嗯,我现在只有一个,OSX Mavericks 附带的那个。我删除了我用自制软件安装的那个,这也是导致崩溃的那个。我卸载并重新安装了 uwsgi - 同样的问题。我现在只有一个版本的 python,但 uwsgi 似乎仍然迷上了另一个版本。我说的版本不是数字,它们都是 2.7.6。但是 Homebrew 是用 Apple 编译器编译的,而默认的 OSX 是用 GCC 编译的:Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) [GCC 4.2.1 (Apple Inc . build 5666) (dot 3)] on darwin
    • pip 是从哪里来的?你也用自制软件吗?如果是这样,您也应该将其删除。使用系统python安装pip,然后一切都应该很好。但是在某些时候需要编译 uwsgi,它需要为你正在使用的 Python 版本找到 Python 头文件和库,这意味着它应该是安装了 pip 的同一个 python。
    • 需要明确的是,使用 Homebrew 安装备用 Python 版本没有任何问题。但是,当您这样做时,您必须非常小心地使用与您要使用的 Python 版本匹配的组件。这意味着 /usr/local/bin/pip 应该是 home brew pip 而系统的 pip 应该在其他地方。 OR 你调用 pip 作为 /usr/bin/python /usr/local/bin/pip .... 对于系统 Python 和 /usr/local/bin/python /usr/local/bin/ pip .... 获取自制版本。
    【解决方案2】:

    可能导致此问题的一个不明显的事情是:您之前使用不同的 python 环境安装了 uwsgi,并且生成的编译后的 uwsgi 轮子保存在您的 pip 轮子缓存中。然后,当您在当前的 python 环境中安装 uwsgi 时,pip 只是抓取缓存的轮子,而不是为您当前的 python 版本实际重建 uwsgi。

    仔细观察输出,看看 pip 是否使用了缓存的轮子。如果是这样,您可以删除缓存的轮子并重新安装 uwsgi 或使用命令行 arg 重新安装以禁用缓存:

    pip uninstall uwsgi
    pip install --no-cache-dir uwsgi
    

    【讨论】:

      猜你喜欢
      • 2014-07-15
      • 2016-11-08
      • 2021-12-01
      • 2018-08-11
      • 2011-05-10
      • 2023-04-04
      • 2019-07-21
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多