Pull to refresh

Comments 20

Напрашивается вопрос, а почему авторы модулей или PyPi не делает сборку пакетов для разных платформ


Делают: code.activestate.com/pypm/

есть же бинарные яйца(binary eggs)?


Термин «бинарные яйца» воодит в заблуждение. В понимании автора, «бинарный» — это отличный от текстового. Конкретно «binary eggs» — это те же исходники, но запакованные zip'ом.

Возможно я напутал с терминологией; я имел ввиду:
Конкретно «binary eggs» — это те же исходники, но запакованные zip'ом.

+ архив может содержать бинарные файлы для определенной платформы.

wiki.python.org/moin/PythonPackagingTerminology
Я таких яиц не встречал. В качестве «ресурса» можно в любую систему дистрибуции положить любой бинарник — как он по платформе выбираться будет?
Да, действительно — там внутри настоящий линуксовский .so файл :). Спасибо за наводку.
Спасибо за pypm, раньше не слышал.

Кстати они тоже говорят, что не факт что будет работать:

We recommend ActivePython users to install packages using PyPM, and only if that fails (usually it doesn't), attempt the same using pip/easy_install.


Можно пытаться комбинировать: сначала ставить из pypm, а нерабочие пакеты ставить из своего индекса. Но тут есть опасность, что нерабочий модуль обнаружится не сразу.
Интересно. Пара вопросов:

1. В pip что-ли уже поддержку wheel влили? Или нужно ветку использовать, или wheel сам поддержку добавляет?

2. А без localshop нельзя? pip умеет ставить пакеты просто из папки («pip install --no-index --find-links:file:///local/dir/SomePackage»); можно еще просто путь до архива указывать, хоть локальный, хоть нет («pip install ./downloads/SomePackage-1.0.4.tar.gz»), да и листинг файлов вроде можно хоть nginx'ом, хоть «python -m http.server» отдавать (и ключиком каким-нибудь сказть pip-у там пакеты искать, pip же умеет ссылки в свободной форме скрейпить). Я сильно в вопросе не разбирался, но всегда было непонятно, почему люди хотят поднять локальный pypi сервер — может, подскажите, какие именно преимущества дает свой pypi сервер?
У pip есть ветка, в которой добавлена поддержка wheel.

Можно и без localshop — зависит от потребностей. По началу у нас была общая папка под NFS; сборочная машина кладет, а сервер оттуда ставит. Можно использовать и для разработки в офисе, чтобы не тянуть с интернета. С nginx тоже получится, хотя часть API pip'а не будет работать (с поиском кажись). Если требуется аутентификация, то можно настроить basic_auth на nginx.

Плюсы использования localshop:
1. Самое главное — возможность загрузки пакетов: своего проекта, сторонние дописанные модули. Например, надо как-то допилить чей-то модуль, и не хочется ждать пока автор примет pull request. Добавим, например, свои инициалы в версию в файле setup.py и зальем в свой индекс. В requirements.txt своего проекта указываем нашу версию, так во время развертки избежим вытягивание из git'a и мороки с доступом к приватным проектам.
2. Аутентификация: каждому сотруднику выдать по пользователю, при нужде можно отключить без возни с htaccess файлами.
3. В фоновом режиме подгружает используемые модули — выступает как зеркало.

Вот так загружаем свой проект в индекс(загрузит .tar.gz и .whl пакеты):
python setup.py sdist bdist_wheel upload -r mypypi

Если ваш проект написан только на питоне, то bdist_wheel можно исключить.

А эта команда скачает все зависимости, построит из них wheel пакеты, и загрузит их в индекс:
pip wheel -v --build-option upload --build-option -r --build-option mypypi -r requirements.txt

Могу в деталях описать в отдельном посте, будет ли полезно?
Ага, т.е. все-таки ветка. С ней, кстати, нужно иметь в виду, что там (в отличие от pip 1.3.1) не проверяются ssl-сертификаты при скачивании, ее обновить бы.

При установке с pypi-сервера еще, вроде бы, есть одна особенность — pip лезет еще по разным ссылкам (не разбирался каким, но вроде из long_description (часто это README) и по всем со странички Home Page, которая как url в setup.py указывается) и ищет новые версии еще и там (что замедляет установку — иногда очень сильно, а при отсутствии проверки ssl — это еще и небезопасно). Т.е., вроде бы, без pypi сервера может все работать быстрее и безопаснее. Ну так, предостережение — если используйте ветку, то лучше форкнуть и до мастера обновить ее.

С загрузкой пакетов — сделать «python setup.py sdist bdist_wheel», без «upload» — .tar.gz-шки (и, видимо, .whl-ки) появятся в папке dist рядом с setup.py (а дальше уже эти файлы куда угодно) — точно так же можно избежать выкачивания из git и прочей мороки.

Зеркало для архивов делается установкой переменной окружения PIP_DOWNLOAD_CACHE (хотя оно обычно не очень спасает, т.к. основное время все равно чаще тратится на скрейпинг ссылок c домашней странички проекта).

Но вцелом ясно, спасибо — с pypi-сервером, видимо, и правда удобнее права раздавать, + pip search заработает.

Пост про wheel — думаю да, полезно.
Для установки неродного питона есть ppa deadsnakes от Felix Krull, которое теперь не только dead, но и наоборот.

Блин.
Мой мозг съеден ubuntu-lts-сервером.
А нет проблемы, что какие-то системные утилиты начинают использовать установленный python и не запускаются, так как не могут найти модули установлены в старый python?
Пакеты из deadsnakes не переписывают то, что уже есть в системе.
Новый и старый питоны живут параллельно.
Репозитории модулей для каждого питона свои, в /usr/lib/python-2.6 /usr/lib/python-2.7
равно как и свои утилиты pip-2.6 pip-2.7
Системные утилиты юзают родной питон, который каки прежде засимлинчен /usr/bin/python — > /usr/bin/python-2.6
Система полностью уверена, что у неё родной, старый питон (кстати, я так и не нашёл, где именно прописана эта «уверенность»)

Нужные утилиты нацеливаются на новый питон через #!python2.7

Проблема возникла только с mod_wsgi для апача, котрый пришлось пересобрать, поменяв какую-то переменную в мэйкфайле.
UFO landed and left these words here
UFO landed and left these words here
Тема интересна. Просто у всех свои велосипеды, зависящие от сложности проекта.
UFO landed and left these words here
Да вроде нет, а как запустить под своим пользователем и получить доступ к 80 порту?
UFO landed and left these words here
UFO landed and left these words here
Only those users with full accounts are able to leave comments. Log in, please.