web-dev-qa-db-ja.com

mod_wsgiにpython2.6ではなくpython2.7.2を使用させますか?

ubuntu 10.04.1 LTSを実行していて、python2.6があらかじめパックされていますが、python2.7.2に置き換える必要があります。

(理由は簡単です、2.7には3からバックポートされた多くの機能があります)

私は使用してpython2.7.2をインストールしました

./configure
make
make altinstall

altinstallオプションは、システムのデフォルトバージョンに触れることなく、/ usr/local/lib/python2.7にインストールし、インタープリターを/usr/local/bin/python2.7に配置しました。

次に、mod_wsgiがpython2.7を見つけるのを助けるために、以下を/ etc/Apache2/sites-available/wsgisiteに追加しました

WSGIPythonHome /usr/local

apacheを起動してテストwsgiアプリを実行しますが、Python2.7ではなくpython 2.6.5で迎えられます

後で私はデフォルトのpython simlinkをpython 2.7を指すように置き換えました

ln -f /usr/local/bin/python2.7 /usr/bin/python

コンソールで「python」と入力するとpython2.7が開きますが、どういうわけかmod_wsgiはまだpython2.6を取得します

次に私が試した、

PATH=/usr/local/bin:$PATH
export PATH

次に、Apacheをすばやく再起動しますが、それでもここでもpython2.6 !!


これが私の$ PATHです

/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

/ etc/Apache2/sites-available/wsgisiteの内容

WSGIPythonHome /usr/local


<VirtualHost *:80>

    ServerName wsgitest.local
    DocumentRoot /home/wwwhost/pydocs/wsgi
    <Directory /home/wwwhost/pydocs/wsgi>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIScriptAlias / /home/wwwhost/pydocs/wsgi/app.wsgi

</VirtualHost>

app.wsgi

import sys

def application(environ, start_response):
    status = '200 OK'
    output = sys.version

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Apache error.log

'import site' failed; use -v for traceback
[Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23235): Initializing Python.
[Sun Jun 19 00:27:21 2011] [notice] Apache/2.2.14 (Ubuntu) mod_wsgi/2.8 Python/2.6.5 configured -- resuming normal operations
[Sun Jun 19 00:27:21 2011] [info] Server built: Nov 18 2010 21:20:56
[Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23238): Attach interpreter ''.
[Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23239): Attach interpreter ''.
[Sun Jun 19 00:27:31 2011] [info] mod_wsgi (pid=23238): Create interpreter 'wsgitest.local|'.
[Sun Jun 19 00:27:31 2011] [info] [client 192.168.1.205] mod_wsgi (pid=23238, process='', application='wsgitest.local|'): Loading WSGI script '/home/wwwhost/pydocs/$
[Sun Jun 19 00:27:50 2011] [info] mod_wsgi (pid=23239): Create interpreter 'wsgitest.local|'.

誰かがmod_wsgiをシステム以外のデフォルトバージョンのpython)で実行することに成功したことがありますか?

5
guron

コンパイルpython 2.7

./configure \
   --prefix=/usr/local \
   --enable-unicode=ucs4 \
   --enable-shared \
   LDFLAGS="-Wl,-rpath /usr/local/lib"

make && make altinstall

--enable-sharedを忘れないでください。そうしないと、後で問題が発生する可能性があります。

python 2.7のmod_wsgiをコンパイルする

https://code.google.com/p/modwsgi/wiki/InstallationIssues

make altinstallをインストールしてpython2.7を実行したため、python-develパッケージをインストールする必要はありません。したがって、適切なpythonを参照するにはmod_wsgiが必要です。

./configure --with-python=/usr/local/bin/python2.7 
# then edit Makefile if you want to change DESTDIR
make && make install

... httpdを起動してみてください...

Httpdの開始:httpd:/etc/httpd/conf/httpd.confの221行目の構文エラー:/etc/httpd/conf.d/wsgi.confの2行目の構文エラー:/opt/mod_wsgi2.7/をロードできませんusr/lib64/httpd/modules/mod_wsgi.so to server:libpython2.7.so.1.0:cannot open shared object file:No such file or directory

同じpythonを使用しておらず、モジュールを特定のオプションにリンクして正しい場所に表示されなかったため、libpython2.7.so.1.0が見つからないため、変更できます libtool check the correct place を作成してください。

# use LDFLAGS to tell libtool resulting lib needs to
# look for shared libs in /usr/local/lib too.
./configure \
   --with-python=/usr/local/bin/python2.7 \
   LDFLAGS="-R/usr/local/lib"
# then edit Makefile if you want to change DESTDIR
# e.g. DESTDIR = /opt/mod_wsgi2.7
make && make install

...もう一度httpを起動してみてください...

Httpdの開始:httpd:/etc/httpd/conf/httpd.confの221行目の構文エラー:/etc/httpd/conf.d/wsgi.confの2行目の構文エラー:/opt/mod_wsgi2.7/をロードできませんusr/lib64/httpd/modules/mod_wsgi.soをサーバーに:/opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so:共有オブジェクトファイルを開くことができません:アクセスが拒否されました

その最後のエラーは、私のシステムがselinuxを実行していて、ファイルにデフォルトのコンテキストがあるためです。 stackoverflowの概要 は、それがselinuxの問題であることを示しています。

selinuxコンテキストの修正

# ls -Z /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so 
-rwxr-xr-x. root root unconfined_u:object_r:user_tmp_t:s0 /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so

修正は、元のmod_wsgiモジュールにある正しいコンテキストを使用することです。

chcon --reference /etc/httpd/modules/mod_wsgi.so /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so 
4
dnozay

mod_wsgi tooを再コンパイルする必要があります。 pythonを再コンパイルするだけでは不十分です(mod_wsgiの正しいバージョンをロードすることを忘れないでください)

編集: ここをクリック インストール手順については

2
Martin M.

これは、Python2.7を使用するようにmod_wsgiを構成する方法です。

私はたまたまこれと同じ問題に直面しました。そして、私はmod_wsgiをアンインストールし、適切な構成で再インストールするオプションを見ていました。

現在のmod_wsgiをアンインストールする必要がないことに気づいた記事の1つを読んで、先に進んで、Python2.7を使用する設定でmod_wsgi3.4(以前はv3.2でした)を再インストールすることができます(インストールプロセスは、エラーや競合なしにすべてを書き換えます)。

私はすでにPython2.7をインストールしているので。

Mod_wsgi-3.4を再インストールしました(アンインストールを実行せずに)

[root @ server〜]#cd〜

[root @ server〜] #wget http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz

[root @ server〜] #tar xvf mod_wsgi-3.4.tar.gz

[root @ server〜]#cd mod_wsgi-3.4

インストールされたpython2.7で設定されたmod_wsgi

[root @ server〜]#。/ configure --with-python =/usr/local/bin/python2.7

[root @ server〜] #make

[root @ server〜]#make install

以下の2つのコマンドは非常に重要です。/ usr/local/libを、libpython2.7.so.1.0をインストールしたフォルダーに置き換えます。/usr/local/libにはありません。

[root @ server〜] #LD_LIBRARY_PATH =/usr/local/lib/usr/local/bin/python

[root @ server〜] #ldconfig

Apacheサーバーを再起動します

[root @ server〜]#service httpd restart

[root @ server〜]#ldd /etc/httpd/modules/mod_wsgi.so

上記のコマンドの出力:Line2は、mod_wsgiがPython2.7ライブラリを使用していることを示しています。わーい!

    linux-vdso.so.1 =>  (0x00007fffc0aa9000)
    libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0x00007f03a5b20000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f03a5903000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f03a56fe000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f03a54fb000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f03a5277000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f03a4ee2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f03a6133000)
2
Utkarsh Sinha

Amazon LinuxにReviewBoardツールをインストールするときに同じ問題が発生します4.9.38-16.35.amzn1.x86_64http://backup.noiseandheat.com/blog/2011/11/installing-reviewboard-on-Amazon-ec2/

yum install mod_wsgiを実行すると、mod_wsgi-python26.x86_64が取得されました。後で私はyum search mod_wsgiでyumを使って検索する方法を学び、そのpython27インストールも利用できることを発見しました。したがって、Sudo yum install mod_wsgi-python27.x86_64を実行すると問題が解決しました。

0
X.X