2016-05-24 4 views
7

До сих пор мы установили psutil через наш пользовательский сервер pypi.Установка psutil без gcc

Теперь у нас есть новая среда, где мы не должны устанавливать gcc.

Теперь старый способ (pip запускает gcc во время установки) больше не работает.

Контекст:

  • серверы Linux
  • питон внутри virtualenv
  • Весь код должен быть развернут из нашего центра обработки данных (без доступа к интернету)

Я вижу эти альтернативы:

RPM

Создайте RPM. Поскольку мы уже запускаем наш virtualenv с --system-site-packages, это работает. Это заставляет все virtualenvs на сервере использовать ту же версию psutil. Но это не будет большой проблемой.

Колесо

Я никогда не использовал это.

Замораживание

Используйте инструмент, как cx_freeze. Я никогда раньше этого не делал.

Другое решение?

Я думаю, что есть другие, может быть, лучшие способы решить эту проблему.

фон

psutil является лишь примером в данном случае. Тот же вопрос возникает и для других пакетов python, содержащих c-расширения. Представьте, что здесь нет RPM.

+0

Я уверен, что я бы просто использовать колесо для этой ситуации. Затем вам нужно построить колесо для каждой целевой архитектуры (хорошим примером этого является страница Гольке [колеса для Windows] (http://www.lfd.uci.edu/~gohlke/pythonlibs/) - убедительная причина для это то, что большинство пользователей Windows не имеют правильной настройки для компиляции C для расширений). Учитывая щедрость, которую вы предложили, есть ли что-то особенное, что заставляет вас думать о компиляции колес, а затем, используя, например, 'pip install' на колесе (' .whl') на целевой машине может быть проблематичным для вас? –

+0

Похоже, это может быть обманом http://stackoverflow.com/questions/31380578/how-to-avoid-building-c-library-with-my-python-package –

ответ

6

Самым идиоматическим способом является использование колес. Фактически, ваш вариант использования является одной из причин, по которым был создан формат колеса.

Построение platform wheel легко:

python setup.py bdist_wheel 

Вы можете получить ошибку "Неверная команда" bdist_wheel". В этом случае вы должны установить пакет wheel:

pip install wheel 

После создания колеса, это в, например, dist/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl. Вы можете установить его:

pip install dist/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 

В целом, установка и использование колеса работает только в системе, которая является двоично-совместимыми. Поскольку это не гарантируется в разных дистрибутивах и версиях Linux, при загрузке колес в центральный PyPI есть restrictions. Эти ограничения не применяются при запуске вашего собственного сервера PyPI.

Вы можете загрузить колесо к пользовательскому PyPI по:

python setup.py bdist_wheel upload --repository <url-to-custom-pypi> 

и установить его из пользовательских PyPI, например, путем:

pip install --index-url <url-to-custom-pypi> psutil 
+0

Колесо - это путь! –

+0

Я не думаю, что есть какие-либо ограничения на загрузку дисков, специфичных для Linux, для Pypi? У вас есть ссылка/указатель на это? Также существует новая поддержка тега платформы «many-linux» и сборки колес. –

+0

. В соответствии с «Руководством пользователя по упаковке Python» (https://packaging.python.org/en/latest/distributing/#platform-wheels), который «ставит своей целью стать авторитетным ресурсом о том, как упаковывать, публиковать и устанавливать дистрибутивы Python с использованием существующих инструментов». В ответ я написал «в соответствии с документацией», который не может быть на 100% точным технически. Я проверю оба и соответственно обновить свой ответ. –