Стандартная библиотека¶
Стандартная библиотека Python содержит огромное количество полезных модулей и является частью стандартного комплекта поставки Python. Ознакомиться со стандартной библиотекой Python очень важно, так как множество задач можно решить очень быстро, если вы знакомы с возможностями этих библиотек.
Рассмотрим некоторые наиболее часто используемые модули этой библиотеки. Детальное описание всех модулей стандартной библиотеки Python можно найти в разделе «Library Reference» документации, входящей в комплект поставки Python.
Давайте изучим несколько полезных модулей.
Если темы в настоящей главе покажутся вам слишком сложными, вы можете её пропустить. Однако я настоятельно рекомендую вернуться к этой главе, когда вы будете чувствовать себя более уверенно с Python.
Модуль sys¶
Модуль sys содержит функциональность, характерную для системы. Так мы видели, что список sys.argv содержит аргументы командной строки.
Предположим, нам нужно узнать версию используемой команды Python с тем, чтобы, к примеру, убедиться в том, что мы используем как минимум версию 3. Модуль sys предоставляет такую возможность.
>>> import sys >>> sys.version_info (3, 0, 0, 'beta', 2) >>> sys.version_info[0] >= 3 True
Как это работает:
Модуль sys содержит кортеж version_info , который хранит информацию о версии. Первый элемент этого кортежа обозначает старшую версию. Мы можем использовать его, например, для того, чтобы убедиться, что программа будет выполняться только в Python 3.0:
Сохраните как versioncheck.py :
import sys, warnings if sys.version_info[0] 3: warnings.warn("Для выполнения этой программы необходима как минимум \ версия Python 3.0", RuntimeWarning) else: print('Нормальное продолжение')
Вывод:
$ python2.7 versioncheck.py versioncheck.py:6: Для выполнения этой программы необходима как минимум версия Python 3.0 RuntimeWarning) $ python3 versioncheck.py Нормальное продолжение
Как это работает:
Мы используем один из модулей стандартной библиотеки, который называется warnings и служит для отображения предупреждений пользователю. Если версия Python менее 3, мы показываем соответствующее предупреждение.
Модуль logging¶
Представьте ситуацию, когда необходимо сохранить некоторые отладочные или другие важные сообщения где-нибудь, чтобы иметь возможность позже проверить, отработала ли программа, как ожидалось. Как мы «сохраним где-нибудь» эти сообщения? Сделать это можно при помощи модуля logging .
Сохраните как use_logging.py :
import os, platform, logging if platform.platform().startswith('Windows'): logging_file = os.path.join(os.getenv('HOMEDRIVE'), os.getenv('HOMEPATH'), 'test.log') else: logging_file = os.path.join(os.getenv('HOME'), 'test.log') print("Сохраняем лог в", logging_file) logging.basicConfig( level=logging.DEBUG, format='%(asctime)s : %(levelname)s : %(message)s', filename = logging_file, filemode = 'w', ) logging.debug("Начало программы") logging.info("Какие-то действия") logging.warning("Программа умирает")
Вывод:
$ python3 use_logging.py Сохраняем лог в C:\Users\swaroop\test.log
Если открыть файл test.log , он будет выглядеть примерно так:
2012-10-26 16:52:41,457 : DEBUG : Начало программы 2012-10-26 16:52:41,474 : INFO : Какие-то действия 2012-10-26 16:52:41,475 : WARNING : Программа умирает
Как это работает:
Мы использовали три модуля из стандартной библиотеки: модуль os для взаимодействия с операционной системой, модуль platform для получения информации о платформе (т.е. операционной системе) и модуль logging для сохранения лога 1 .
Прежде всего, при помощи строки, возвращаемой функцией platform.platform() мы проверяем, какая операционная система используется (для более подробной информации см. import platform; help(platform) ). Если это Windows, то мы определяем диск, содержащий домашний каталог, путь к домашнему каталогу на нём и имя файла, в котором хотим сохранить информацию. Сложив все эти три части, мы получаем полный путь к файлу. Для других платформ нам нужно знать только путь к домашнему каталогу пользователя, и мы получим полный путь к файлу.
При помощи функции os.path.join() мы объединяем три части пути к файлу вместе. Мы используем эту функцию вместо простого объединения строк для того, чтобы гарантировать, что полный путь к файлу записан в формате, ожидаемом операционной системой.
Далее мы конфигурируем модуль logging таким образом, чтобы он записывал все сообщения в определённом формате в указанный файл.
Наконец, мы можем выводить сообщения, предназначенные для отладки, информирования, предупреждения и даже критические сообщения. После выполнения программы можно просмотреть этот файл и узнать, что происходило в программе, хотя пользователю, запустившему программу, ничего не было показано.
Модули urllib и json¶
#!/usr/bin/python # Filename: yahoo_search.py import sys if sys.version_info[0] != 3: sys.exit('This program needs Python 3.0') import json import urllib, urllib.parse, urllib.request, urllib.response # Get your own APP ID at http://developer.yahoo.com/wsregapp/ YAHOO_APP_ID = 'jl22psvV34HELWhdfUJbfDQzlJ2B57KFS_qs4I8D0Wz5U5_yCI1Awv8.lBSfPhwr' SEARCH_BASE = 'http://search.yahooapis.com/WebSearchService/V1/webSearch' class YahooSearchError(Exception): pass # Taken from http://developer.yahoo.com/python/python-json.html def search(query, results=20, start=1, **kwargs): kwargs.update( 'appid': YAHOO_APP_ID, 'query': query, 'results': results, 'start': start, 'output': 'json' >) url = SEARCH_BASE + '?' + urllib.parse.urlencode(kwargs) result = json.load(urllib.request.urlopen(url)) if 'Error' in result: raise YahooSearchError(result['Error']) return result['ResultSet'] query = input('What do you want to search for? ') for result in search(query)['Result']: print(" : ".format(result['Title'], result['Url']))
Резюме¶
Мы изучили лишь некоторые возможности некоторых модулей стандартной библиотеки Python. Я настоятельно рекомендую просмотреть документацию по стандартной библиотеке Python, чтобы увидеть все доступные модули.
Далее мы обратимся к некоторым аспектам, которые сделают вашу экскурсию по Python более «завершённой».
- log — англ. «журнал», «вести журнал» (прим.перев.) ↩
Как узнать, какие библиотеки используются в проекте если нет файла requirements.txt?
Я нашел один проект, в котором конечно, есть множество библиотек и нет файла requirements.txt, мне нужно создать этот файл, я пробовал сделать это через pip freeze, но он не видит никаких библиотек. Как можно решить эту проблему?
- Вопрос задан более двух лет назад
- 1632 просмотра
Комментировать
Решения вопроса 1
bituke pip freeze нужно запускать на сервере где сейчас работает проект. Если вы его скачаете себе на компьютер и выполните pip freeze то разумеется ничего не получите. Если доступа к серверу нет, то действия следующие:
1. В файле settings.py вверху есть указание на версию Django, что то вроде этого «Generated by ‘django-admin startproject’ using Django 2.2.16.» Для примера возьмем версию 2.2.16.
2. На сайте https://pypi.org/ находим пакет Django, далее переходим в «История выпусков», находим там версию 2.2.16, дата 1 сентября 2020 года.
3. Обходим весь код сайта и ищем там импортирование пакетов, например from celery import shared_task. Значит в проекте используется пакет celery.
4. Идем на сайт https://pypi.org/ и находим пакет celery, далее переходим «История выпусков», и ищем последнюю версию которая была выпущена до 1 сентября 2020 года, для нас это версия 3.1 от 4 августа 2020 года.
Шаги 3 и 4 повторяем до тех пор пока не будут установлены все зависимости.
Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 1
pip freeze > requirements.txt
Вам надо указать куда фризить.
Либо если вы нашли его на гите, возможно там есть папка venv, а в ней можно найти все установленные пакеты. Но это вряд ли.
Ответ написан более двух лет назад
bituke @bituke Автор вопроса
Да не работает это. В проекте куча библиотек, я создаю виртуалку, перехожу в директорию проекта, пишу pip freeze > requirements.txt, но он не видит никаких библиотек.
bituke @bituke Автор вопроса
пробовал менять питон, но это не помогло.
bituke @bituke Автор вопроса
P.S. У меня у самого нет библиотек, которые требует этот проект, я думал, что можно их установить все просто одной командой. Но это не выходит, я так понимаю их нужно в ручную устанавливать, если нет файла requirements.txt?
Python-сообщество
![]()
- Начало
- » Python для новичков
- » Узнать версию файла
#1 Дек. 28, 2011 17:41:42
majestic От: Зарегистрирован: 2010-09-22 Сообщения: 9 Репутация: 0 Профиль Отправить e-mail
Узнать версию файла
Необходимо средствами Python получить версию файла (*.exe, *.dll). В Windows -> Свойства файла -> Версия.
Подскажите как это можно сделать, с помощью какой библиотеки?
12. Виртуальные окружения и пакеты¶
Python приложения часто используют пакеты и модули, не входящие в стандартную библиотеку. Приложениям иногда нужна специфичная версия библиотеки, потому что приложение может требовать, чтобы конкретная ошибка была исправлена или приложение может быть написано, используя устаревший версию интерфейса библиотеки.
Это означает, что иногда невозможно для одной установки Python соответствовать каждому приложению. Если приложение A требует версию 1.0 некого модуля, а приложение B требует версию 2.0, то требования конфликтуют и установка либо версии 1.0, либо 2.0 оставит одно из приложений нерабочим.
Решение этой проблемы заключается в создании виртуальной окружения , отдельное дерево каталогов, которое содержит инсталляцию Python для конкретной версии Python, плюс ряд дополнительных пакетов.
Различные приложения могут тогда использовать различные виртуальные окружения. Для разрешения предыдущей проблемы конфликтующих требований приложение A может иметь свое собственное окружение с установленной версией 1.0, в то время как приложение B имеет другое виртуальное окружение с версией 2.0. Если приложение B требует обновить библиотеку до версии 3.0, то это не повлияет на окружение приложения A.
12.2. Создание виртуальных окружений¶
Модуль для создания и управления виртуальными окружениями называется venv . venv обычно устанавливает самую последнюю версию Python, которая доступна. Если у вас есть несколько версий Python на вашей системе, то вы можете выбрать конкретную версию Python, выполнив python3 или какую версию вы хотите.
Чтобы создать виртуальную среду, выберите каталог, в который необходимо поместить ее, и запустите модуль venv как сценарий с путем к каталогу:
python3 -m venv tutorial-env
При этом будет создан каталог tutorial-env , если он не существует, а также создать внутри нее каталоги, содержащие копию Python интерпретатор, стандартная библиотека и различные вспомогательные файлы.
Общее расположение каталога для виртуальной среды .venv . Это имя сохраняет каталог скрытым в оболочке и, таким образом, отходит от пути, давая ему имя, объясняющее, почему каталог существует. Это также, предотвращает конфликты с файлами определений переменных среды .env поддерживаемыми некоторыми инструментами.
После создания виртуального окружения его можно активировать.
На Windows, выполните:
tutorial-env\Scripts\activate.bat
На Unix или MacOS, выполните:
source tutorial-env/bin/activate
(Этот скрипт написана для оболочки bash. Если используется csh или fish оболочки, ито существуют альтернативы activate.csh и activate.fish , которые вам следует использовать вместо этого.)
Активируя виртуальное окружение вы изменяете ваше приглашение оболочки, чтобы показывать, какое виртуальное окружение вы используете, и модифицируете это окружение так, что запуск python даст ваш конкретную версию и установку Python. Например:
$ source ~/envs/tutorial-env/bin/activate (tutorial-env) $ python Python 3.5.1 (default, May 6 2016, 10:59:36) . >>> import sys >>> sys.path ['', '/usr/local/lib/python35.zip', . '~/envs/tutorial-env/lib/python3.5/site-packages'] >>>
12.3. Управление пакетами с помощью pip¶
Вы можете установить, обновить и удалить пакеты, используя программу с именем pip. По умолчанию pip установит пакеты из Python пакетного индекса . Вы можете просмотреть Python Package Index, перейдя на него в веббраузере, или вы можете использовать ограниченную поисковую возможность pip :
(tutorial-env) $ pip search astronomy skyfield - Элегантная астрономия для Python gary - Галактическая астрономия и гравитационная динамика. novas - Библиотека астрономии NOVAS военно-морской обсерватории США astroobs - Предоставляет астрономические эфемериды для планирования наблюдений с помощью телескопа PyAstronomy - Коллекция инструментов для Python, связанных с астрономией. .
pip имеет ряд подкоманд: «search», «install», «uninstall», «freeze», и т.д. (См. руководство по Установка модулей Python для получения полной документации для pip .)
Вы можете установить самую последнюю версию пакета, указав имя пакета:
(tutorial-env) $ pip install novas Collecting novas Downloading novas-3.1.1.3.tar.gz (136kB) Installing collected packages: novas Running setup.py install for novas Successfully installed novas-3.1.1.3
Вы также можете установить конкретную версию пакета, указав за именем пакета == и версию пакета:
(tutorial-env) $ pip install requests==2.6.0 Collecting requests==2.6.0 Using cached requests-2.6.0-py2.py3-none-any.whl Installing collected packages: requests Successfully installed requests-2.6.0
Если вы снова запустите эту команду, pip заметит, что запрашиваемая версия уже установлена, и ничего не сделает. Вы можете установить отличную версию пакета, чтобы получить ее, или вы можете выполнить pip install —upgrade для обновления пакета до последней версии:
(tutorial-env) $ pip install --upgrade requests Collecting requests Installing collected packages: requests Found existing installation: requests 2.6.0 Uninstalling requests-2.6.0: Successfully uninstalled requests-2.6.0 Successfully installed requests-2.7.0
pip uninstall вместе с одним или больше именами пакетов удалит пакеты из виртуального окружения.
pip show покажет информацию о конкретном пакете:
(tutorial-env) $ pip show requests --- Metadata-Version: 2.0 Name: requests Version: 2.7.0 Summary: Python HTTP for Humans. Home-page: http://python-requests.org Author: Kenneth Reitz Author-email: me@kennethreitz.com License: Apache 2.0 Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages Requires:
pip list отобразит все установленные пакеты в этом виртуальном окружении:
(tutorial-env) $ pip list novas (3.1.1.3) numpy (1.9.2) pip (7.0.3) requests (2.7.0) setuptools (16.0)
pip freeze выведет похожий список установленных пакетов, но вывод использует формат, который ожидает pip install . Обычное соглашение — сохранить этот список в файле requirements.txt :
(tutorial-env) $ pip freeze > requirements.txt (tutorial-env) $ cat requirements.txt novas==3.1.1.3 numpy==1.9.2 requests==2.7.0
Затем requirements.txt может быть помещен в систему контроля версий и поставляться как часть приложения. Пользователи тогда могут установить все необходимые пакеты с install -r :
(tutorial-env) $ pip install -r requirements.txt Collecting novas==3.1.1.3 (from -r requirements.txt (line 1)) . Collecting numpy==1.9.2 (from -r requirements.txt (line 2)) . Collecting requests==2.7.0 (from -r requirements.txt (line 3)) . Installing collected packages: novas, numpy, requests Running setup.py install for novas Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
pip обладает множеством других опций. Смотрите полную документацию Установка модулей Python по pip . Когда вы написали пакет и хотите сделать его доступным в Python Package Index, см. в руководстве Распространение модулей Python .
