Форум сайта python.su
Здравствуйте! В Python полный ноль, но так сложилось, что попросили перекинуть приложение с Убунту ) на ARM-железку с Linux.
Под Убунту процесс установки расписан достаточно подробно, Линукс на ARM знает только собственно Python 2.7 и pip.
Я попытался погуглить, но 99% того, что я нашел относятся к синтаксису, принципам и т.п., а по прикладному применению ничего нормального не попалось.
У меня как у С/С++ программиста несколько вопросов:
1)В питон-проекте есть файл require.txt, который содержит перечень необходимых проекту библиотек или модулей (не знаю как назвать корректно), я после выполнения команды:
pip install -r require.txt
посмотрел, что он в систему ставит, и в 3 наугад выбранных директориях с соотвествующим названием обнаружил только текстовый файлы, никаких lib.so как в линуксе.
В С/С++ я так понял аналогом этого действия является установка различных библиотек, к которым обращается приложение. Но там библиотека это объект, который для корректного подключения должен быть скомпилирован под аналогичную архитектуру.
Правильно ли я понял, что для питон-приложений (при наличии установленного соственно python) такого понятия как кросс-компиляция или архитектура системы вообще не существует, т.к. python при компиляции приложения работает только с текстовыми файлами? И соотвественно все сторонние библиотеки/модули, которые предустанавливает команда:
pip install
также устанавливаются как текстовые файлы и являются архитектурно-независимымы?
2)В линуксе по умолчания бибилиотеки ставятся в одну из нескольких директорий типа /usr/lib и т.п. Правильно ли я понял, что pip install по умолчанию (если не сидеть под виртуальными переменными) размещает все в корневой директории питона?
3)Несколько раз встречал рекомендации работать с питоном через virtualenvwrapper. Я попытался посмотреть, что там происходит и получается, что дописывается несколько переменных окружения в Линукс плюс создается отдельная папка, куда копируются с сохранением внутренних путей все бинарники питона уже установленного в Линукс, копируются все скрипты изменененные так, чтобы обращаться к питону из этой папки и все необходимые сторонние модули устанавливаемые через pip install.
В виртуальных переменных и отдельной папке под них есть какая-то острая необходимость обусловленнаяя спецификой питона или это делается исключительно для удобства. И при прописывании всех путей руками в каком-нибудь .bashrc разницы приложение при запуске не почувствует?
Спасибо.
Офлайн
1) если кратко то да. Отдельный случай когда библиотека имеет C расширение, тогда нужен установленный в систему компилятор (обычно gcc установлен) и в процессе установки все скомпилируется автоматически (при отсутствии ошибок разумеется, чаще всего это нехватка в системе .h файлов зависимых библиотек).
2)да, обычно это папка site-packages . Иногда немного в другие. В целом это не суть важно.
3) это делается чаще всего для “чистоты” разработки что бы создать окружение с нужным набором библиотек и их версий, отличных от системных. Т.е. это инструмент для разработки, распространяются Python программы и запускаются без вирт. окружений
Офлайн
спасибо большое
а можно еще поподробнее, про бибилиотеки с С расширением? Или ссылку, где прочитать можно.
Под С расширением имеется ввиду тупо “имяфайла.с” или какие-то импорты/инклюды внутри чисто питоновского файла?
Автоматически скомпилируется - это после чего-нибудь типа “python myproject.py” питон, увидев такую бибилиотеку, автоматически задействует тот же gcc из PATH: Линукса?
Офлайн
Вот документация.
Смысл такой - часть функционала можно написать не на питоне,а на C. Как внутри это выглядит не важно для конечного использования. Когда вы устанавливаете библиотеку с таким расширением через pip, он скачивает архив, в котором есть файл setup.py - вот в нем есть инструкции как устанавливать python файлы, в том числе есть инструкции о том что нужно скомпилировать С код. Скорее всего внутри компилируется в .so файл, который легко импортируется средствами самого питона. Поэтому работая с библиотекой вы работаете как с обычным python кодом.
Офлайн