uwsgi + django + virtualenv _functoolsをピックアップできない(インポートエラー)

StackOverflow https://stackoverflow.com/questions/3985507

  •  10-10-2019
  •  | 
  •  

質問

さて、私はvirtualenvなしでこれを試しました:

uwsgi --home /home/auston/new_proj/ --socket /tmp/uwsgi2.sock --chmod-socket --module app_wsgi --pp /home/auston/new_proj/nikeshere --logto /tmp/uwsgi.log --master --processes 4 -P

何があっても、私はこれを手に入れます:

*** Starting uWSGI 0.9.6.5 (32bit) on [Thu Oct 21 08:05:44 2010] ***
compiled with version: 4.4.3
Python version: 2.6.6 (r266:84292, Oct 21 2010, 04:07:38)
[GCC 4.4.3]
your memory page size is 4096 bytes
allocated 412 bytes (0 KB) for 1 request's buffer.
Setting PythonHome to /home/auston/new_proj/...
binding on UNIX socket: /tmp/uwsgi2.sock
chmod() socket to 666 for lazy and brave users
your server socket listen backlog is limited to 64 connections
added /home/auston/new_proj/nikeshere to pythonpath.
initializing hooks...done.
['/home/auston/new_proj/nikeshere', '.', '', '/home/auston/new_proj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg', '/home/auston/new_proj/lib/python2.6/site-packages/pip-0.8.1-py2.6.egg', '/home/auston/new_proj/lib/python26.zip', '/home/auston/new_proj/lib/python2.6', '/home/auston/new_proj/lib/python2.6/plat-linux2', '/home/auston/new_proj/lib/python2.6/lib-tk', '/home/auston/new_proj/lib/python2.6/lib-old', '/home/auston/new_proj/lib/python2.6/lib-dynload', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/home/auston/new_proj/lib/python2.6/site-packages', '/usr/local/lib/python2.6/dist-packages/pip-0.8.1-py2.6.egg', '/usr/local/lib/python2.6/site-packages', '/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', '/home/auston/new_proj/nikeshere', '/usr/local/lib/python2.6']
Traceback (most recent call last):
  File "/home/auston/new_proj/nikeshere/app_wsgi.py", line 11, in <module>
    import django.core.handlers.wsgi
  File "/usr/local/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 1, in <module>
    from threading import Lock
  File "/usr/lib/python2.6/threading.py", line 13, in <module>
    from functools import wraps
  File "/usr/lib/python2.6/functools.py", line 10, in <module>
    from _functools import partial, reduce
ImportError: No module named _functools

-home to /usr/local/lib/python/2.6に変更した場合、OSのapp_wsgi.pyインポートで失敗します。念のため、以下にあります:

import sys
import os

sys.path.append(os.path.abspath(os.path.dirname(__file__)))

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

基本的に、どうすればuwsgiにfunctoolsを認識したり、正しいパスに乗ってもらうことができます(経路は上記の出力です)。皆さんが与えることができていただきありがとうございます!!

PS Ubuntu 10.04 -UWSGI 0.9.6.5 -NGINX 0.8.53 -VIRTUAL ENV Python 2.6.5-「レギュラー(またはシステム)」Python 2.6.6 -Django 1.2.3

アップデート:

私はuwsgiにリクエストの受け入れを開始することができました。

uwsgi --home /home/auston/new_proj --socket /tmp/uwsgi2.sock --chmod-socket --pp /home/auston/new_proj/nikeshere --logto /tmp/uwsgi.log --master --processes 4 -P

しかし、今ではアプリが見つかりませんエラーを取得します:

「UWSGIエラーWSGIアプリケーションが見つからない」

私は近づいていますが、ロードするために必要なモジュールを含めることができないため、アプリが見つからないので、私はまだ提案に感謝します!

役に立ちましたか?

解決

したがって、上記のように、問題はPythonPathにあり、_Functoolsというモジュールを見つけることができません。

どうやら、_FunctoolsはACモジュールであり、PythonPathにパスを追加する必要がありました。そのため、元のWSGI.pyとの違いは次のとおりです。

import sys
sys.path.append('/usr/local/lib/python2.6/lib-dynload') # to load _functools
sys.path.append('/usr/local/lib/python2.6/site-packages') # to load django
sys.path.append('/usr/local/lib/python2.6/dist-packages') # cautionary to load django
sys.path.append('/usr/lib/python2.6') # to load os
import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'iwin.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

とてもハッキーですが、今のところうまくいきます...

他のヒント

私はそれが古いトピックであり、スタックビルディングブロックのバージョンが変更されたことを知っていますが、VirtualenvにUWSGIインストールされたLIBSの下で認識していないことと同じ問題がありました。解決策は、以下に示すように、HomeパラメーターをVirtualenvに向けることです(から取られた https://uwsgi.readthedocs.org/en/latest/tutorials/django_and_nginx.html).

だから私のためにコマンド:

uwsgi --http :8000 --module ii.wsgi --home /home/dev/.virtualenvs/ii_env/

Djangoアプリケーション(ii)ディレクトリに携わっている間、機能しました。

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /path/to/your/project
# Django's wsgi file
module          = project.wsgi
# the virtualenv (full path)
home            = /path/to/virtualenv

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = /path/to/your/project/mysite.sock
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

チェックアウト http://blog.zacharyvoase.com/2010/03/05/django-uwsgi-nginx/. 。彼は非常によく似たセットアップを使用しています。

私は非常に似た問題を抱えていますが、これを見つけました:

virtuerenvをインストールすると、元のものにシンリンクを作成して、Python標準ライブラリを「インストール」します(ying/usr/lib/python2.7)。ただし、Virtualenv Python LIBディレクトリを確認すると、いくつかの基本ライブラリのみが作成されたシンリンクがあります。あなたの機能はおそらくそれらの中にはありません。

したがって、解決策は、シンリンクを手動で作成することです。あなたは多くのシンリンクを作成する必要があるかもしれないので、それはピタですが、それは私にとってよりきれいな解決策のように思えます。ソースファイルをハッキングする必要はなく、透明です。

Symlinkは、 venv_directory, 、しかし、例えば

venv_directory/lib/python2.7/site-packages/

それがあなたのために働くことを願っています!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top