web-dev-qa-db-ja.com

Python 3.7virtualenvのmod_wsgiをインストールする

Python 3.7のmod_wsgiをインストールしてDjangoのセットアップを完了しようとしていますが、次のエラーメッセージで失敗します

Collecting mod-wsgi
  Using cached https://files.pythonhosted.org/packages/9e/37/dd336068ece37c43957aa337f25c59a9a6afa98086e5507908a2d21ab807/mod_wsgi-4.6.4.tar.gz
Building wheels for collected packages: mod-wsgi
  Running setup.py bdist_wheel for mod-wsgi ... error
  Complete output from command /home/user/myproject_env/bin/python3.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-9hnl4thc/mod-wsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-a9t55ene --python-tag cp37:

  WARNING: The Python installation you are using does not appear to have
  been installed with a shared library, or in the case of MacOS X, as a
  framework. Where these are not present, the compilation of mod_wsgi may
  fail, or if it does succeed, will result in extra memory being used by
  all processes at run time as a result of the static library needing to
  be loaded in its entirety to every process. It is highly recommended
  that you reinstall the Python installation being used from source code,
  supplying the '--enable-shared' option to the 'configure' script when
  configuring the source code prior to building and installing it.

...

    running build_ext
    building 'mod_wsgi.server.mod_wsgi-py37' extension
    creating build/temp.linux-x86_64-3.7
    creating build/temp.linux-x86_64-3.7/src
    creating build/temp.linux-x86_64-3.7/src/server

...

    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/include/httpd -I/home/user/python/include/python3.7m -c src/server/wsgi_stream.c -o build/temp.linux-x86_64-3.7/src/server/wsgi_stream.o -I/usr/include/httpd -I. -I/usr/include/apr-1 -DLINUX -D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -pthread -I/usr/include/apr-1 -I/usr/include/apr-1
    gcc -pthread -shared build/temp.linux-x86_64-3.7/src/server/wsgi_thread.o build/temp.linux-x86_64-3.7/src/server/mod_wsgi.o build/temp.linux-x86_64-3.7/src/server/wsgi_buckets.o build/temp.linux-x86_64-3.7/src/server/wsgi_memory.o build/temp.linux-x86_64-3.7/src/server/wsgi_interp.o build/temp.linux-x86_64-3.7/src/server/wsgi_restrict.o build/temp.linux-x86_64-3.7/src/server/wsgi_logger.o build/temp.linux-x86_64-3.7/src/server/wsgi_server.o build/temp.linux-x86_64-3.7/src/server/wsgi_convert.o build/temp.linux-x86_64-3.7/src/server/wsgi_metrics.o build/temp.linux-x86_64-3.7/src/server/wsgi_validate.o build/temp.linux-x86_64-3.7/src/server/wsgi_daemon.o build/temp.linux-x86_64-3.7/src/server/wsgi_Apache.o build/temp.linux-x86_64-3.7/src/server/wsgi_stream.o -o build/lib.linux-x86_64-3.7/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so -L/home/user/python/lib -L/home/user/python/lib/python3.7/config-3.7m-linux -lpython3.7m
    /usr/bin/ld: /home/user/python/lib/libpython3.7m.a(abstract.o): relocation R_X86_64_32S against symbol `_Py_NotImplementedStruct' can not be used when making a shared object; recompile with -fPIC

...

    /usr/bin/ld: /home/user/python/lib/libpython3.7m.a(getopt.o): relocation R_X86_64_32S against `.rodata.str4.4' can not be used when making a shared object; recompile with -fPIC
    /usr/bin/ld: /home/user/python/lib/libpython3.7m.a(parser.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
    /usr/bin/ld: final link failed: Nonrepresentable section on output
    collect2: error: ld returned 1 exit status
    error: command 'gcc' failed with exit status 1

    ----------------------------------------
Command "/home/user/myproject_env/bin/python3.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-9hnl4thc/mod-wsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-fxo44dv3/install-record.txt --single-version-externally-managed --compile --install-headers /home/user/myproject_env/include/site/python3.7/mod-wsgi" failed with error code 1 in /tmp/pip-install-9hnl4thc/mod-wsgi/

バージョン情報は次のとおりです。

Apache 2.4.6 
CentOS 7 
Python 3.7.0
Django 2.0.5

編集:

gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
httpd-devel-2.4.6-80.el7.centos.1.x86_64
4
Rafayet Ullah

Mod_wsgiのドキュメントに記載されているように、問題はPython用の共有ライブラリがないことです。

ソースコードからPythonを自分でインストールする場合は、以下もお読みください。

Dockerについて話していることは無視してください。同じ問題が発生します。構成オプションの選択には注意する必要があります。

3

インストールからの警告が示すように、共有オブジェクトを提供しないpythonにmod-wsgiをインストールしようとしています。

ソースからpythonをコンパイルするときは、--enable-sharedフラグを追加して、リンクできるlibpython#.#.so共有オブジェクトを生成します。

2
Anthony Sottile

便利なリンクを共有してくれた@GrahamDumpletonに感謝します。

--enable-sharedのみのソースパッケージからpythonをインストールしたため、エラー "python:共有ライブラリの読み込み中にエラーが発生しました:libpython3.6m.so.1.0:共有オブジェクトファイルを開くことができません: pip3経由でパッケージをインストールしようとしたときに「そのようなファイルまたはディレクトリはありません」

それを機能させるために、以下の手順を実行しました。

./configure --prefix /usr/local --enable-shared LDFLAGS="-Wl,-rpath,/usr/local/lib"
make
make install

これで、pip3 installmod-wsgiが正常に機能しました。

0
Mohan