web-dev-qa-db-ja.com

UbuntuでのPython3用mod_wsgiのインストール

Python 3の場合、Ubuntuにmod_wsgiをインストールするための明確な手順を教えてもらえますか?

私はFlask&mod_wsgiをPython3を使用して正常に取得しましたが、しばらくの間は幸せでした。

... Apacheのログを見て、この問題が発生したことに気づくまで: https://askubuntu.com/questions/569550/assertionerror-using-Apache2-and-libapache2-mod-wsgi- py3-on-ubuntu-14-04-python

apt-getは、古いバージョンのlibapache2-mod-wsgi-py3をインストールしています。これにより、Apacheのログにエラーが発生します。 (これを報告する必要がありますか、報告する場合はどこですか?)

リンクでは、エンジニアはpipを使用してより最新のバージョンをインストールしています。

興味深いことに、彼はそれを仮想Python3環境にインストールしているようです。 (これはシステムを使用する場合と何か違いますかpip3?)

また、彼はpip3 install mod_wsgiを使用していますが、pip3 search mod_wsgiは以下を返します。

(編集:彼はそうではない、彼はpip3ではなくpipを使用している。それは正しいのだろうか?彼は自分の配線を交差させたか?pipはpy3venvにいるという事実を無視せず、単にシステムのpy2インストールを使用しますか?とにかくそれは混乱を解決しません...)

mod_wsgi-metrics          - Metrics package for Apache/mod_wsgi.
cykooz.recipe.pastewsgi   - Buildout recipe to create paste.deploy entry points for mod_wsgi or uwsgi
mod_wsgi-httpd            - Installer for Apache httpd web server.
apachemiddleware          - Useful Python middleware for use with mod_wsgi deployments
tranchitella.recipe.wsgi  - Buildout recipe to create paste.deploy entry points for mod_wsgi
mod_wsgi                  - Installer for Apache/mod_wsgi.

では、mod_wsgi-httpdとは何でしょうか。そして、これが私が欲しいものでないことは確かですか?

最後に、誰かがソースからmod_wsgiをインストールするためのリンクを提供できますか?

編集:エンジニアがpip install mod_wsgiではなくpip3 ...を使用している理由がわかりません。確かにそれは正しくありませんか?しかし、pip3を使用すると、次のようになります。

pi@PiDroplet:~$ cd web/piFlask

pi@PiDroplet:~/web/piFlask$ source ./venv3/bin/activate
(venv3)
pi@PiDroplet:~/web/piFlask$ pip3 install mod_wsgi
Downloading/unpacking mod-wsgi
  Downloading mod_wsgi-4.4.12.tar.gz (991kB): 991kB downloaded
  Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py) Egg_info for package mod-wsgi
    Traceback (most recent call last):
      File "<string>", line 17, in <module>
      File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module>
        'missing Apache httpd server packages.' % APXS)
    RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages.
    Complete output from command python setup.py Egg_info:
    Traceback (most recent call last):

  File "<string>", line 17, in <module>

  File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module>

    'missing Apache httpd server packages.' % APXS)

RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages.

----------------------------------------
Cleaning up...
Command python setup.py Egg_info failed with error code 1 in /home/pi/web/piFlask/venv3/build/mod-wsgi
Storing debug log for failure in /home/pi/.pip/pip.log

そして今、私はpip3 install mod_wsgi-httpdを試します、コンパイルするのに約5分かかります:

(venv3)
pi@PiDroplet:~/web/piFlask$ pip3 install mod_wsgi-httpd
Downloading/unpacking mod-wsgi-httpd
  Downloading mod_wsgi-httpd-2.4.12.5.tar.gz
  Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi-httpd/setup.py) Egg_info for package mod-wsgi-httpd
    apr-1.5.2/
    apr-1.5.2/config.layout
    apr-1.5.2/build.conf
    apr-1.5.2/emacs-mode
    :

だから今、私は私のPy3 virtualenvに2番目のApacheがあるのではないかと心配しています。

しかし、それはエラーを取り除きます。 pip3 install mod_wsgiが正常に完了するようになりました。

編集:しかし今、私は彼の指示に従うために完全に行き詰まりました:私は/etc/Apache2/mods-available/wsgi_express.loadを持っていません、そして彼がそれを作ることを提案しているなら、最初はこれは任意のように思われ、次に彼が置くことを提案するテキストつまり、LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi-py34.cpython-34m.so-このファイルは私のシステムに存在しません。

私は/etc/Apache2/mods-available/wsgi.loadを持っています

再びテクノロジーに溺れて、誰かが私に一線を投げることはできますか?

15
P i

Python 3仮想環境を有効にしていて、そのbinディレクトリがパスにある場合、おそらく「pip3」ではなく「pip」を実行するだけで済みます。「which pip」を実行して想定した仮想環境からのものかどうかを確認します。

「mod_wsgi-httpd」パッケージは、Apache自体の個別のインスタンスをインストールして、システム全体のApacheが古くなっている、または開発ヘッダーファイルがない、またはシステム全体の構成を変更できないという問題を回避するために特別に用意されています。システム全体の問題を修正するためのrootアクセス権がなく、非特権ポートでの実行のみに関心があるため、rootアクセス権が不要な場合は、通常、これはより適切です。また、「mod_wsgi-httpd」がインストールされているバージョンのApacheを使用する唯一の方法であるため、「mod_wsgi-httpd」がインストールされた後に「pip」がインストールされた「mod_wsgi」パッケージの「mod_wsgi-express」を使用する必要があります。 。

そのため、「mod_wsgi-httpd」の場合は、無視してください。すでにインストールしている場合は、 'pip'でそれと 'mod_wsgi'の両方をアンインストールします。後者は「mod_wsgi-httpd」Apacheバージョンにバインドされ、「mod_wsgi.so」はシステム全体で機能しないため、アンインストールする必要があります。

リンク内のユーザーのステップを分離することに関して、それらは正しいように見えますが、ステップ3では、追加されるLoadModuleおよびWSGIPythonHome行が実行時に出力されるものであることを強調する必要がありますmod_wsgi-express install-moduleコマンド。何が出力されるかは、実際のインストール環境に合わせてカスタマイズされます。したがって、値を構成するのではなく、そのコマンド出力を使用してください。

wsgi.loadファイルがまだ残っているので、Sudo a2dismod wsgi削除するか、手動で削除します。古いシステムパッケージのmod_wsgiから残っています。

5

私はこの答えを「他の人に役立つかもしれない自己へのメモ」として意図しています。

apt-getの執筆時点では、古いバージョンのmod_wsgiがインストールされています。

pipは最新バージョンをインストールします。これは、ソースコードをダウンロードしてコンパイルすることによって行われます。

Python3 virtualenvをセットアップし、source ./venv3/bin/activateでアクティブ化します。which pipが現在この環境を使用していることを確認してください。 pipとpip3は互換性があるようです。

私の場合、私の./venv3はmy flaskフォルダ内にあります。そしてmod_wsgiの唯一の目的は、Apacheルートにhttp://myfoo.org/flaskリクエストを送信してもらうことですflask app。したがって、mod_wsgiをこのvenv3にインストールすることは理にかなっています。

ただし、pipを正常にコンパイルするには、まず必要なヘッダーファイルを提供するSudo apt-get install Apache2-devが必要です。その後、再起動が必要でした。その後、pip install mod_wsgiは問題なく完了します。

次に、元のリンクの指示に従います。

(venv3)
$ Sudo venv3/bin/mod_wsgi-express install-module
LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi-py34.cpython-34m.so
WSGIPythonHome /home/pi/web/piFlask/venv3

次に、これらの2行をそれぞれ含む/etc/Apache2/mods-available/wsgi_express.{load,conf}を作成する必要があります。

最後にモジュールを有効にし、Apacheのエラーログを確認します。

a2enmod wsgi
Sudo service Apache2 restart
cat /var/log/Apache2/error.log
26
P i