pip install mod_wsgi не работает в virtualenv

Я пытаюсь установить mod_wsgi с помощью pip в python 2.7.10 на mac os 10.12 внутри virtualenv. Я намерен использовать его в Django 1.10.3. Когда я запускаю «pip install mod_wsgi», я получаю следующий вывод:

Collecting mod_wsgi
Using cached mod_wsgi-4.5.7.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/private/var/folders/sf/kdqqs98d06326180mss7hggh0000gn/T/pip-build-hgA7s1/mod-wsgi/setup.py", line 247, in <module>
    APR_INCLUDES = get_apr_includes().split()
  File "/private/var/folders/sf/kdqqs98d06326180mss7hggh0000gn/T/pip-build-hgA7s1/mod-wsgi/setup.py", line 219, in get_apr_includes
    stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/sf/kdqqs98d06326180mss7hggh0000gn/T/pip-build-hgA7s1/mod-wsgi/

Я новичок в virtualenv, так что может быть, я просто что-то упускаю из того, как это настроить. Я пробовал обновить pip, переустановить setuptools и ez_setup через pip.


person A_Sandwich    schedule 12.11.2016    source источник
comment
У вас установлены инструменты командной строки Xcode? Говорит ли xcode-select --install, что они установлены при запуске?   -  person Graham Dumpleton    schedule 12.11.2016
comment
Выполнение этой команды побудило меня запустить установку. Я пошел дальше и установил инструменты командной строки. Я все еще получаю ту же проблему при запуске pip install mod_wsgi.   -  person A_Sandwich    schedule 13.11.2016
comment
Программа /usr/sbin/apxs существует? Можете ли вы найти apxs где-нибудь в вашей системе? Можно использовать find / -name apxs. Apple прерывает установку модулей Apache и mod_wsgi при каждом новом крупном обновлении ОС, и на этот раз похоже, что они не устанавливают apxs в обычное место.   -  person Graham Dumpleton    schedule 13.11.2016
comment
Но потом. Он присутствует на моем запасном ноутбуке, где я обновился до Sierra. Возможно, они сделали необходимым установить полный Xcode, но это не должно быть необходимо. Была ли ваша Sierra свежей установкой или обновлением Yosemite.   -  person Graham Dumpleton    schedule 13.11.2016
comment
/usr/sbin/apxs существует и apxs работает в терминале. Раньше я устанавливал xcode, но когда я запустил его на этот раз, его пришлось переустанавливать. (причиной этого могло быть обновление до Sierra) Даже после установки я получил ту же ошибку.   -  person A_Sandwich    schedule 13.11.2016
comment
Что вы получите, если запустите /usr/sbin/apxs -q APR_CONFIG. Если это дает путь к программе с именем вроде apr-1-config, существует ли эта программа?   -  person Graham Dumpleton    schedule 13.11.2016
comment
Выполнение, похоже, указывает на то, что apr-1-config не существует: Sandwichs-MacBook-Pro:sbin sandwich$ /usr/sbin/apxs -q APR_CONFIG /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.12.xctoolchain/usr/local/bin/apr-1-config apxs:Error: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.12.xctoolchain/usr/local/bin/apr-1-config not found!. Sandwichs-MacBook-Pro:sbin sandwich$   -  person A_Sandwich    schedule 13.11.2016
comment
Это предполагает, что Xcode теперь является обязательным требованием для установки mod_wsgi. У вас установлен Xcode? Что находится в каталоге /Applications/Xcode.app/Contents/Developer/Toolchains, если вы считаете, что он установлен.   -  person Graham Dumpleton    schedule 13.11.2016
comment
Обратите внимание, что когда я говорю Xcode, я имею в виду полное приложение Xcode, а не только инструменты командной строки.   -  person Graham Dumpleton    schedule 13.11.2016
comment
Я могу запустить Xcode и ранее использовал его с кодом C++, поэтому я уверен, что он установлен. Папка Toolchains содержит Swift_2.3.xctoolchain и XcodeDefault.xctoolchain   -  person A_Sandwich    schedule 13.11.2016


Ответы (1)


Есть две проблемы с установкой mod_wsgi в MacOS X Sierra.

Первая проблема заключается в том, что Apple сделала установку Apache по умолчанию, которую они предоставляют, совершенно непригодной для использования, когда речь идет о возможности установки сторонних модулей Apache. Это связано с препятствиями, которые уже были в предыдущих версиях MacOS X, что означало, что вам приходилось преодолевать препятствия, чтобы заставить его работать.

Проблема в данном случае заключается в том, что Apple удалила программы apr-1-config и apu-1-config из дистрибутива Xcode. Это означает, что apxs потерпит неудачу при определенных типах запросов о существующей конфигурации Apache. Это информация, необходимая для создания сторонних модулей для Apache. Без знания того, где установлены заголовочные файлы, сборка модулей Apache завершится ошибкой.

Учитывая историю Apple, которая нарушала возможность установки дополнительных модулей Apache в каждом обновлении ОС и никогда не исправляла это на протяжении всего срока службы ОС, что требовало обходных путей, маловероятно, что они снова решат эту проблему.

На других форумах одним из предложений обойти проблему является установка пакетов APR и APU с помощью brew, а затем символическая ссылка на программы apr-1-config и apu-1-config из них в место, которое ищет apxs. Мне это кажется подверженным ошибкам, так как кажется, что модули затем могут быть скомпилированы с файлами заголовков brew, и они могут не соответствовать версии библиотеки для тех, которые предоставляются установкой Apache операционной системы. Это может привести к сбоям.

Таким образом, единственное гарантированное решение — не использовать установку Apache, поставляемую с операционной системой.

Таким образом, одним из вариантов может быть использование brew для установки Apache и использование brew для установки Apache (а не только APR и APU из brew).

Другой вариант при использовании метода pip install mod_wsgi — сначала использовать pip устанавливаемый Apache, предоставленный для mod_wsgi.

pip install -vvv mod_wsgi-httpd

Использовать это следует только там, где нет выбора, и вы всегда должны использовать системный Apache, если можете. Сейчас у нас, похоже, нет выбора.

Это установит Apache в установку Python или в виртуальную среду. Это займет некоторое время, так как он собирается скомпилировать/установить APR/APU/Apache и, возможно, другие необходимые библиотеки. Я использую -vvv, чтобы вы могли видеть, как он выполняет компиляцию, иначе вы можете подумать, что он завис.

Как только это будет сделано, запустите pip install mod_wsgi.

Это полезно только при использовании mod_wsgi-express. Вы не можете использовать это, если хотите использовать скомпилированный mod_wsgi с операционной системой Apache, поскольку модуль, построенный таким образом, будет несовместим с операционной системой Apache.

Вторая проблема заключается в том, что MacOS X Sierra изменила API-интерфейсы операционной системы для получения информации о задачах процесса. Это будет означать, что mod_wsgi 4.5.7 и более ранние версии в любом случае не смогут скомпилироваться. В mod_wsgi 4.5.8 есть исправление, или вы можете использовать код из репозитория mod_wsgi github, пока не будет выпущен 4.5.8, если это необходимо.


ОБНОВЛЕНИЕ 1

Удалось включить хак в setup.py для выполнения pip install mod_wsgi. Это также будет в mod_wsgi 4.5.8. Это означает, что вы по-прежнему можете использовать системный Apache и вам не нужно устанавливать отдельный, например, с помощью pip install mod_wsgi-httpd. Это не решит аналогичные проблемы с методом for configure/make для установки mod_wsgi.

person Graham Dumpleton    schedule 16.11.2016
comment
Установка apache через brew, похоже, помогла! Спасибо за такой развернутый и понятный ответ! - person A_Sandwich; 19.11.2016
comment
это также не работает в cpanel centos, любая помощь? - person xyz; 04.06.2018
comment
@xyz Создайте новый вопрос. Не задавайте свой вопрос в качестве комментария. - person Graham Dumpleton; 05.06.2018
comment
Вы находитесь на CentOS. Этот вопрос касался конкретной проблемы с macOS. Как может быть такая же проблема? Создайте новый вопрос с точным описанием вашей конкретной проблемы. - person Graham Dumpleton; 05.06.2018