使用带有django的uwsgi时导入错误(找不到符号:__PyInt_AsInt)

时间:2015-01-11 02:45:18

标签: python django uwsgi

我已经尝试过修复,但无法做到。对不起,如果其他地方存在此问

我正在关注http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html,目前正在尝试确保django与uWSGI一起使用。我正在尝试运行uWSGI --http-socket :8000 --module mysite.wsgi,但我得到了:

Traceback (most recent call last):
  File "./mysite/wsgi.py", line 13, in <module>
    from django.core.wsgi import get_wsgi_application
  File "/anaconda/lib/python2.7/site-packages/django/core/wsgi.py", line 2, in <module>
    from django.core.handlers.wsgi import WSGIHandler
  File "/anaconda/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 3, in <module>
    import cgi
  File "/anaconda/lib/python2.7/cgi.py", line 50, in <module>
    import mimetools
  File "/anaconda/lib/python2.7/mimetools.py", line 6, in <module>
    import tempfile
  File "/anaconda/lib/python2.7/tempfile.py", line 32, in <module>
    import io as _io
  File "/anaconda/lib/python2.7/io.py", line 51, in <module>
    import _io
ImportError: dlopen(/anaconda/lib/python2.7/lib-dynload/_io.so, 2): Symbol not found: __PyInt_AsInt
  Referenced from: /anaconda/lib/python2.7/lib-dynload/_io.so
  Expected in: dynamic lookup

我已经遇到过uWSGI没有使用正确安装的问题。uwsgi尽管

会尝试使用/usr/local/bin/uwsgi
which uwsgi
//anaconda/bin/uwsgi

,产生No such file or directory。目前,我设置uWSGI="//anaconda/bin/uwsgi"来解决问题并让uwsgi工作,但我怀疑可能会出现类似的问题。我认为它可能会尝试使用/usr/bin/python而不是/anaconda/bin/python,并且无法从anaconda导入,从而导致错误。但是,我不确定如何解决它/确认这是问题,任何建议将不胜感激。

谢谢!

编辑:我还尝试使用所有当前版本的python安装import _io,没有问题。 brew unlink python帮助解决了uwsgi问题冲突的anaconda版本(最初使用别名修复,如上所述),但此问题仍然存在。

编辑:从$ PATH中删除anaconda,然后重新安装/取消链接/链接django,openssl和libxml2“工作”。我会在稍后的步骤中发现这是否会导致问题,但我仍然不知道anaconda安装会发生什么。我真想知道自从我使用scipy / numpy / etc以来发生了什么。非常频繁,所以这绝对是一个临时修复。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

我刚刚在尝试使用 django 项目在 mac 上运行 uwsgi 时遇到此问题

uwsgi --http :9090 --module uwsgi_django_project.wsgi

(在本例中,我的 django 项目名为 uwsgi_django_project

来自 uwsgi 的堆栈跟踪是

Traceback (most recent call last):
  File "./uwsgi_django_project/wsgi.py", line 12, in <module>
    from django.core.wsgi import get_wsgi_application
  File "/opt/anaconda3/envs/django_uwsgi_39/lib/python3.8/site-packages/django/__init__.py", line 1, in <module>
    from django.utils.version import get_version
  File "/opt/anaconda3/envs/django_uwsgi_39/lib/python3.8/site-packages/django/utils/version.py", line 1, in <module>
    import datetime
  File "/opt/anaconda3/envs/django_uwsgi_39/lib/python3.8/datetime.py", line 8, in <module>
    import math as _math
ImportError: dlopen(/opt/anaconda3/envs/django_uwsgi_39/lib/python3.8/lib-dynload/math.cpython-38-darwin.so, 2): Symbol not found: _PyExc_MemoryError
  Referenced from: /opt/anaconda3/envs/django_uwsgi_39/lib/python3.8/lib-dynload/math.cpython-38-darwin.so
  Expected in: flat namespace
 in /opt/anaconda3/envs/django_uwsgi_39/lib/python3.8/lib-dynload/math.cpython-38-darwin.so
unable to load app 0 (mountpoint='') (callable not found or import error)

非常类似于 OP 得到的错误,除了 Symbol not found: _PyExc_MemoryError

我在 conda 环境中通过 pip 安装了 uwsgi,显然通过 pip 安装的包与 anaconda 环境的 python 之间存在不兼容。

解决方案是从我的环境中删除 uwsgi

pip uninstall uwsgi

并使用anaconda安装

conda install -c conda-forge uwsgi

在执行此操作并使用我的 django 应用程序运行 uwsgi 后,它运行良好。

归功于此 blog,我在这里找到了解决我的问题的方法,这可能会解决许多与 uwsgidjango 类似的问题