Модули и пакеты в Python
Одна из ключевых особенностей Python заключается в том, что фактический базовый язык довольно мал. Это намеренная конструктивная особенность для поддержания простоты. Большая часть мощной функциональности поставляется через внешние модули и пакеты.
Основная работа установки до сих пор состояла в том, чтобы дополнить ядро Python полезными модулями для научного анализа.
Модули
Модуль — это просто файл, содержащий определения, функции и операторы Python. Помещение кода в модули полезно из-за возможности импортировать функциональность модуля в ваш скрипт или сеанс IPython, например:
importastropy
importastropy.table
data = astropy.table.Table.read(‘my_table.fits’)
Вы увидите импорт практически в каждом скрипте Python, и вскоре он станет вашей второй натурой.
Вопрос:
Импорт модулей и указание имени модуля перед ними-это такая проблема, зачем мне это делать?
Ответ:
Он держит все модульным и отдельным. Например, многие модули имеют функцию read (), так как это обычная вещь. Без использования <модуля>.синтаксис <function>(…) не было бы никакого способа узнать, какой из них вызвать.
Пакеты
Пакет-это просто способ собрать связанные модули вместе в рамках единой древовидной иерархии. Очень сложные пакеты, такие как NumPy или SciPy, имеют сотни отдельных модулей, поэтому их размещение в структуре, похожей на каталог, позволяет упорядочить вещи и избежать коллизий имен. Например, вот частичный список субпакетов, доступных в SciPy.
- scipy.fftpack- Дискретные алгоритмы преобразования Фурье
- scipy.stats — статистические функции
- scipy.lib Python — для внешних библиотек
- scipy.lib.blas — для библиотеки BLAS
- scipy.lib.lapack — для библиотеки LAPACK
- scipy.integrate — процедуры интеграции
- scipy.linalg — для процедуры линейной алгебры
- scipy.sparse.linalg — для линейной алгебры
- scipy.sparse.linalg.eigen – для решения собственных значений
- scipy.sparse.linalg.eigen.arpack – для решения собственных значений с использованием итерационных методов.
Упражнение: Импортируйте модуль пакета и узнайте о нем больше
Импортируйте модуль линейной алгебры из пакета SciPy и узнайте, какие функции он предоставляет.
Поиск и установка других пакетов
Если вы зашли так далеко, у вас есть рабочая научная среда Python, в которой есть большая часть того, что вам когда-либо понадобится. Тем не менее, почти наверняка вы в конечном итоге найдете потребность, которая не будет удовлетворена в рамках вашей текущей установки. Здесь мы узнаем, где найти другие полезные пакеты и как их установить.
Ресурсы пакета
Когда вы найдете какой-нибудь пакет в Интернете, обратите внимание на несколько вещей:
- Хорошая современная документация с примерами
- Легко устанавливается без большого количества зависимостей (или имеет подробные инструкции по установке)
- Активно развивается
Списки ресурсов
Существует ряд сайтов, специально посвященных Python для астрономии, с организованными списками полезных ресурсов и пакетов.
- Astropython.org resources
- Comfort at 1 AU
- AstronomicalPython
Индекс пакетов Python является основным репозиторием для сторонних пакетов Python (около 14000 пакетов и растет). На PyPI доступно все больше пакетов, связанных с астрономией, но в этом списке отсутствует множество доступных опций.
Преимущество использования PyPI заключается в простоте установки с помощью pipinstall<package_name>.
Упражнение: Поиск пакетов для координатных манипуляций
Найдите один или несколько пакетов Python, которые преобразуют координаты из Галактических в эклиптические FK5.
Подсказка: теги полезны при astropython.org и не забудьте кнопку “далее” внизу.
Установка пакета
Существует два стандартных способа установки пакета.
Установка pip
Скрипт установки pip доступен в нашей научной установке Python и очень прост в использовании (когда он работает). В процессе установки вы уже видели много примеров установки pip в действии. Особенности включают в себя:
- Если он снабжен именем пакета, то он запросит сайт PyPI, чтобы узнать об этом пакете. Если предположить, что пакет есть, то pipinstall автоматически загрузит и установит пакет.
- Будет принимать локальный файл tar (при условии, что он содержит устанавливаемый пакет Python) или URL-адрес, указывающий на файл tar.
- Можно установить в области пользовательского пакета через pipinstall<packageor URL> —user (но см. обсуждение ниже)
pythonsetup.py install
Некоторые пакеты могут не быть установлены с помощью pipinstall. Чаще всего будет какое-то очевидное (или нет) сообщение об ошибке компиляции или отсутствующей зависимости. В этом случае вероятным следующим шагом будет загрузка установочного tar-файла и его распаковка. Перейдите в каталог пакета и найдите такие файлы, как:
INSTALL
README
setup.py
setup.cfg
Если есть файл УСТАНОВКИ или README, то, надеюсь, вы найдете полезные инструкции по установке. Большинство хорошо зарекомендовавших себя пакетов python выполняют установку через стандартный setup.py сценарий. Это используется следующим образом:
pythonsetup.py —help # get options
python setup.py install # install в области python (root / adminreq’d)
pythonsetup.py install —user # установить в область пакета пользователя
Где устанавливаются пакеты?
Важным параметром в процессе установки является то, куда поместить файлы пакета. Мы видели опцию —user в pipinstall и python setup.py установите. — А что это такое? В разделе ниже мы задокументируем, как это работает. См. обсуждение в Нескольких питонах на вашем компьютере по причине, по которой вы можете захотеть это сделать, но сначала, пожалуйста, прочтите это предупреждение:
Предупреждение
Мы настоятельно рекомендуем не устанавливать пакеты с —user, если вы не являетесь экспертом и действительно не понимаете, что делаете . Это происходит потому, что локальная пользовательская версия всегда будет иметь приоритет и, таким образом, потенциально может нарушить другие установки Python и вызвать трудные для понимания проблемы. Большие аналитические пакеты, такие как CIAO, STSci_Python или CASA, тщательно тестируются при условии наличия интегрированной среды, которую они предоставляют. Если вы начнете все испортить, то все ставки будут сняты.
С —user
Пакеты устанавливаются в локальный каталог, принадлежащий пользователю, когда вы выполняете одно из следующих действий:
pipinstall —useraplpy
python setup.py установка —пользователь
Это помещает пакеты в:
Mac ~/Library/Python/2.x/lib/python/site-packages
Linux ~/.local/lib/python-2.x/site-packages
Windows %APPDATA%/Python/Python2x/site-packages
Примечание
На Mac, если вы не использовали Anaconda или EPD PythonFramework, вы можете увидеть пользовательские пакеты в ~/.local/lib, как и для linux. Это зависит от того, установлен ли Python как фреймворк macOS или нет.
БЕЗ —user
Если вы используете Anaconda или некорневую установку Python, то нет никаких проблем с разрешениями на любой платформе, так как вся установка локальна в вашем собственном каталоге.
Однако установка на общесистемную установку Python потребует привилегий root или admin. Установка таким образом имеет преимущество в том, что делает пакет доступным для всех пользователей установки Python, но имеет недостаток в том, что при необходимости сложнее отказаться от изменений. В общем случае мы рекомендуем использовать только системный менеджер пакетов (например, yum) для установки пакетов в системный Python. Это обеспечит целостность вашей системы Python, что важно, даже если вы единственный пользователь.
Как найти пакет после установки?
Найти файл, связанный с пакетом или модулем, очень просто, просто используйте команду help в IPython:
importscipy
helpscipy
Это дает что-то вроде:
scipy
FILE
/usr/local/lib/python2.6/site-packages/scipy/__init__.pyDESCRIPTION
SciPy: A scientific computing package for Python
================================================Documentation is available in the docstrings and
online at http://docs.scipy.org.
…
Интернете по адресу http://docs.scipy.org.
…
Удаление пакетов
Нет простого и полностью последовательного способа сделать это, если вы не используете такие решения, как Anaconda или Canopy. Сообщество Python работает над этим. Однако в большинстве простых случаев вы можете просто удалить файл модуля или каталог, который обнаруживается с помощью метода, показанного выше.