Установите mod wsgi с Python 2.7 на Windows 64 bit
Я пытаюсь развернуть свой веб-сайт Django, который написан с использованием Python 2.7, на 64-разрядной машине windows (Windows Server 2008 R2). Я установил предварительно скомпилированную версию Apache (Apache 2.4.16 x64) из https://www.apachehaus.com/cgi-bin/download.plx (из-за отсутствия опции, предоставляемой Apache Lounge***), и проверили, что Python 2.7 работает на 64-битной версии и компилируется с VC9. Я не смог найти предварительно построенный двоичный файл для mod_wsgi (для Windows 64 бит и скомпилированный с VC9), поэтому я скачал исходный код для mod_wsgi из https://github.com/GrahamDumpleton/mod_wsgi/releases/tag/4.4.13 и следовал указаниям из https://github.com/GrahamDumpleton/mod_wsgi/blob/develop/win32/README.rst , изменяя файл ap24py27-win64-VC9.mk
так, чтобы он указывал на нужные каталоги для APACHE_ROOTDIR
и PYTHON_ROOTDIR
, и используя 64-разрядную командную строку C++ 2008 для запуска команды nmake -f ap24py27-win64-VC9.mk clean
. Однако это дало мне ошибку:
wsgi_memory.obj : error LNK2019: unresolved external symbol GetProcessMemoryInfo referenced
in function getPeakRSS
mod_wsgi.so : fatal error LINK1120: 1 unresolved externals
NMAKE : fatal error U1077: `"...Visual C++ for Python9.0VCBinamd64c1.EXE"` :
return code `0x2`
Stop.
Я прочитал документы по установке и настройке для mod_wsgi несколько раз и искали в интернете в том числе так в течение последних нескольких часов безрезультатно. Что я здесь делаю не так и как я могу это исправить?
* * * я знаю, что официальный документ для установки mod_wsgi предупреждает против использования двоичных файлов из других источников, кроме Apache Lounge, но я, кажется, не могу найти правильную скомпилированную версию (для VC9 и Windows 64 bit) с сайта. Может ли это быть проблемой, и если да, то как я могу это исправить?
Обновление : следующее По предложению Аделина, мне удалось заставить namke -f ap24py27-win64-VC9.mk clean
бежать. Однако, когда я пытаюсь запустить namke -f ap24py27-win64-VC9.mk
или namke -f ap24py27-win64-VC9.mk install
, я получаю страницы предупреждений, которые говорят: warning C4820: '...' : '...' bytes padding added after data member '...'
, пока компилятор не завершит работу с
fatal error C1083: Cannot open include file: 'Python.h': No such file or directory
...mod_wsgi-4.4.13srcserverwsgi_memory.c<124> : warning C4711: function 'getCurrentRSS' selected for automatic inline expansion
NMAKE: fatal error U1077: '"C:...MicrosoftVisual C++ for Python9.0VCBinamd64c1.EXE"' : return code '0x2'
Stop.
Есть ли у кого-нибудь идеи, почему это может быть и как я должен это исправить?1 ответ:
У меня была эта же ошибка.
Проблема в том, что
cl.exe
не находитpsapi.lib
. Эта библиотека включает в себя функцию, на которую ссылаются вwsgi_memory.c
-GetProcessMemoryInfo
.Чтобы исправить это, выполните следующие действия:
- найдите
psapi.lib
(выполните поиск поC:\
)- откройте файл
ap24py27-win64-VC9.mk
, который вы используете для компиляции, с помощью любой текстовый редактор- смотрите, какой еще файл
.mk
он включает. Скорее всегоcommon-VC9.mk
- Откройте этот файл (
common-VC9.mk
) с помощью любого текстового редактора- под
LDFLAGS
, добавьте еще одну строку/LIBPATH:"PATH_FOUND_AT_STEP_1"\
- сохраните изменения и повторите попытку
Какой занозой в заднице это было и для меня:)
P. S. Если вы не найдете
psapi.lib
в любом месте, это потому что у вас нет SDK для Windows. Я установил какWindows 7 , так иWindows 8 SDK и в конечном итоге получилpsapi.lib
, расположенный здесьC:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64
Редактировать: Чтобы дать вам решение для ваших новых ошибок в несколько общем виде, всякий раз, когда
nmake
бросает"No such file"
ошибки, расположение файла неправильно указано в файлеcommon-VC9.mk
.Есть два типа файлов, которые будут искать
nmake
:.h
или.lib
.Если
.h
не найден, соответствующий путь должен быть правильно указан в переменнойCPPFLAGS
файлаcommon-VC9.mk
. Если.lib
не найден, необходимо соответствующим образом обновить путьLDFLAGS
.Как? Так же, как вы включили путь для
psapi.lib
: найдите файл и добавьте соответствующий путь к нужному файлу. переменная:CPPFLAGS
илиLDFLAGS
.