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のコンパイル
        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
        }
    
    

    コンパイル方法
  • コンパイラ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は、
    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
    
    
  • common-VC 16を修正する.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
    
    
  • である.
  • build-win 64-VC 16を修正する.batは以下の内容
    nmake -f common-VC16.mk clean
    nmake -f ap24py35-win64-VC16.mk install
    nmake -f common-VC16.mk clean
    
  • である.
  • 最後に、このファイルbuild-win 64-VC 16をコマンドラインで実行する.bat、コンパイルに成功し、コンパイルに成功すると自動的にmod_wsgi-py??-VC??.so(mod_wsgi-py 35-VC 16.so)は、Apacheインストールディレクトリのmodulesフォルダにコピーされます.このモジュールをロードするには、Apacheのプロファイルを自分で変更する必要があります.