win 10コンパイルmod_wsgi,Python 3に基づく.5とApache 2.4.39
5285 ワード
文書ディレクトリ要約 環境 注-Python>=3.7コンパイルに失敗する コンパイル方法 サマリ
Windows 10でmodをコンパイルする方法について説明します.wsgi ( Python3.5 + Apache-2.4.39 )
環境 win 10 Apache-2.4.39 - https://www.apachelounge.com/download/ Python-3.5 Visual Studio 2019(c++開発コンポーネントを含む) mod_wsgi - https://github.com/GrahamDumpleton/mod_wsgi[時効性:本明細書で使用するソースコードは、2019-06-15] にダウンロードされる.
注意-Python>=3.7はコンパイルに失敗します
mod_wsgiのソースコードには以下の内容が存在するがpython 37.libファイルに関数PyOSが存在しませんAfterFork_Child()を使用すると、Pythonのバージョンが3.7以上になるとコンパイルに失敗し、リンク時にエラー:解析できない外部記号をプロンプトします.そこで、本稿ではPython 3.5を用いてmod_wsgiのコンパイル
コンパイル方法コンパイラcl.exeを見つけ、その位置をユーザ環境変数PATHに書き込む.すべてのコンポーネントのビット数が一致していることを確認してください.たとえば、64ビット、または32ビットです.例えば、64ビットマシン上で64ビットプログラムをコンパイルするには、MSVCコンパイラディレクトリbinHostx 64x 64x 64cl.exe を使用する必要がある.https://github.com/GrahamDumpleton/mod_wsgimod_をダウンロードwsgiソース、現在のフォルダ に解凍ディレクトリmod_へwsgi/win 32/、このディレクトリにはコンパイルmod_が格納されます.wsgiに必要なMakefileファイルですが、2019/06/15まではVS 2019とPython 3.5のMakefileは使用されていませんので、次は3つのことをする必要があります 「ap 24 py 34-win 64-VC 10.mk」をコピーし、名前を「ap 24 py 35-win 64-VC 16.mk」 に変更します.コピー「common-VC 10.mk」、名前変更「common-VC 16.mk」 「build-win 64-VC 10.bat」をコピーし、名前を「build-win 64-VC 16.bat」 に変更します.
ap 24 py 35-win 64-VC 16を修正する.mkは、 common-VC 16を修正する.mkは以下の内容 である. build-win 64-VC 16を修正する.batは以下の内容 である.最後に、このファイルbuild-win 64-VC 16をコマンドラインで実行する.bat、コンパイルに成功し、コンパイルに成功すると自動的にmod_wsgi-py??-VC??.so(mod_wsgi-py 35-VC 16.so)は、Apacheインストールディレクトリのmodulesフォルダにコピーされます.このモジュールをロードするには、Apacheのプロファイルを自分で変更する必要があります.
Windows 10でmodをコンパイルする方法について説明します.wsgi ( Python3.5 + Apache-2.4.39 )
環境
注意-Python>=3.7はコンパイルに失敗します
mod_wsgiのソースコードには以下の内容が存在するがpython 37.libファイルに関数PyOSが存在しませんAfterFork_Child()を使用すると、Pythonのバージョンが3.7以上になるとコンパイルに失敗し、リンク時にエラー:解析できない外部記号をプロンプトします.そこで、本稿ではPython 3.5を用いてmod_wsgiのコンパイル
if (wsgi_python_initialized && !wsgi_python_after_fork) {
#if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 7)
PyOS_AfterFork_Child();
#else
PyOS_AfterFork();
#endif
}
コンパイル方法
APACHE_ROOTDIR = Apache2.4
PYTHON_ROOTDIR = Python3.5
PYTHON_VERSION = 35
MSVC_INCLUDE = MSVC
MSVC_LIB = MSVC
WINSDK_INCLUDE_UM = windows sdk um
WINSDK_INCLUDE_UCRT = windows sdk ucrt
WINSDK_INCLUDE_SHARE = windows sdk shared
WINSDK_LIB_UCRT = windows sdk ucrt
WINSDK_LIB_UM = windows sdk um
include common-VC16.mk
の例である:APACHE_ROOTDIR = D:\App-Server\Apache24.39-Win64-VS16\Apache24
PYTHON_ROOTDIR = D:\Dev\Python\Python35
PYTHON_VERSION = 35
MSVC_INCLUDE = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\include
MSVC_LIB = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\lib\x64
WINSDK_INCLUDE_UM = C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um
WINSDK_INCLUDE_UCRT = C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt
WINSDK_INCLUDE_SHARE = C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared
WINSDK_LIB_UCRT = C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64
WINSDK_LIB_UM = C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64
include common-VC16.mk
CPPFLAGS = \
/DWIN32 \
/DNDEBUG \
/I"$(MSVC_INCLUDE)" \
/I"$(WINSDK_INCLUDE_UM)" \
/I"$(WINSDK_INCLUDE_UCRT)" \
/I"$(WINSDK_INCLUDE_SHARE)" \
/I"$(PYTHON_ROOTDIR)\include" \
/I"$(APACHE_ROOTDIR)\include"
CFLAGS = \
/MD \
/GF \
/Gy \
/O2 \
/Wall \
/Zc:wchar_t \
/Zc:forScope
LDFLAGS = \
/link \
/LIBPATH:"$(APACHE_ROOTDIR)\lib" \
/LIBPATH:"$(PYTHON_ROOTDIR)\libs" \
/LIBPATH:"$(MSVC_LIB)" \
/LIBPATH:"$(WINSDK_LIB_UM)" \
/LIBPATH:"$(WINSDK_LIB_UCRT)" \
/OPT:REF \
/OPT:ICF=2 \
/RELEASE \
/SUBSYSTEM:WINDOWS
LDLIBS = \
python$(PYTHON_VERSION).lib \
libhttpd.lib \
libapr-1.lib \
libaprutil-1.lib
SRCFILES = ..\src\server\*.c
mod_wsgi.so : $(SRCFILES)
cl $(CPPFLAGS) $(CFLAGS) $(SRCFILES) /LD $(LDFLAGS) $(LDLIBS) /OUT:$@
VARIANT = py$(PYTHON_VERSION)-VC16
install : mod_wsgi.so
copy $? $(APACHE_ROOTDIR)\modules\mod_wsgi-$(VARIANT).so
:
:
:
:
: You now need to edit $(APACHE_ROOTDIR)\conf\httpd.conf and add:
:
: LoadModule wsgi_module modules/mod_wsgi-$(VARIANT).so
:
:
:
:
clean :
del *.obj *.so *.so.manifest *.lib *.exp
nmake -f common-VC16.mk clean
nmake -f ap24py35-win64-VC16.mk install
nmake -f common-VC16.mk clean