У меня есть пакет, содержащий расширения C, которые я хотел бы загрузить в pypi: https://github.com/Erotemic/netharn
Я собрал колесо в Ubuntu 18.04 с помощью команды python setup.py bdist_wheel --py-limited-api=cp36
, но когда я отправился на загрузку с twine upload --skip-existing dist/*
, но затем я получаю сообщение об ошибке, что у него есть неподдерживаемый тег платформы:
HTTPError: 400 Client Error: Binary wheel 'netharn-0.0.4-cp36-abi3-linux_x86_64.whl' has an unsupported platform tag 'linux_x86_64'. for url: https://upload.pypi.org/legacy/
После небольшого поиска я обнаружил, что PEP 513 требует сборки колеса для поддержки manylinux (он же Centos5): https://github.com/pypa/manylinux
Здесь приведен пример: https://github.com/pypa/python-manylinux-demo/blob/master/travis/build-wheels.sh
Однако все примеры, которые я могу найти, всегда строят свои двоичные файлы с использованием какого-либо CI-сервера.Если возможно, я хотел бы иметь возможность строить их на месте.Я подумал, что должно быть просто скопировать команды докера и собрать его в контейнере докера на моей собственной машине.Однако у меня есть проблемы.(Я гарантировал, что все существующие каталоги build и dist в репозитории были удалены)
Первое, что я сделал, это бросил себя в сеансе интерактивного докера, чтобы я мог играть с вещами.Я выбрал образ x8_64 и подключил локальный каталог к своему хранилищу кода на /io
на докере.Затем я начал интерактивную сессию Bash.
REPO_DPATH=$HOME/code/netharn
DOCKER_IMAGE=quay.io/pypa/manylinux1_x86_64
PRE_CMD=""
# Interactive test
docker run -it --rm -v $REPO_DPATH:/io $DOCKER_IMAGE $PRE_CMD bash
Внутри докера я сначала хотел построить колесо для python36 (на самом деле это единственный Python, который я заинтересован в поддержке на данный момент).
PYBIN=/opt/python/cp36-cp36m/bin/
Простая установка файла require.txt не сработала, поэтому я сначала вручную установил несколько пакетов.После этого (imgaug
был виновником, потому что он опирается на конкретную главную сборку), казалось, установился файл require.txt.
cd /io
"${PYBIN}/pip" install opencv_python
"${PYBIN}/pip" install Cython
"${PYBIN}/pip" install pytest
"${PYBIN}/pip" install -e git+https://github.com/aleju/imgaug.git@master#egg=imgaug
"${PYBIN}/pip" install torch # this is in the requirements.txt, but will cause problems later
"${PYBIN}/pip" install -r requirements.txt
Затем я запускаю команду wheel и связываю внешние общие библиотеки в wheel
"${PYBIN}/pip" wheel /io/ -w wheelhouse/
for whl in wheelhouse/*.whl; do
auditwheel repair "$whl" -w /io/wheelhouse/
done
Последний шаг - установка пакета и проверка
"${PYBIN}/pip" install netharn --no-index -f /io/wheelhouse
(cd "$HOME"; "${PYBIN}/python" -m xdoctest netharn all)
Тем не менее, когда я тестирую его, я получаю
ImportError: /opt/python/cp36-cp36m/lib/python3.6/site-packages/torch/_C.cpython-36m-x86_64-linux-gnu.so: ELF file OS ABI invalid
Я думаю, это потому, что torch
не поддерживает Centos5.Чего я не понимаю, так это то, как torch
удается загрузить общую библиотеку cpython-36m-x86_64-linux-gnu.so
в pypi, но у меня возникают проблемы?