Разное

Узнать текущую версию python: Как проверить версию Python | ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Содержание

Как проверить версию Python | ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Python – один из самых популярных языков программирования в мире. Он используется для разработки веб-сайтов, написания сценариев, машинного обучения, анализа данных и многого другого.

В этой статье объясняется, как проверить, какая версия Python установлена в вашей операционной системе с помощью командной строки. Это может быть полезно при установке приложений, написанных на Python, для которых требуется определенная версия Python.

Мы также покажем вам, как программно определить, какая версия Python установлена в системе, где выполняется скрипт Python. Например, при написании сценариев Python вам необходимо определить, поддерживает ли сценарий версию Python, установленную на компьютере пользователя.

 

Python предустановлен в большинстве дистрибутивов Linux и macOS.

Чтобы узнать, какая версия Python установлена в вашей системе, введите команду python –version или python -V:

python --version

Команда выведет версию Python по умолчанию, в данном случае, то есть 2.7.15. Версия, установленная в вашей системе, может отличаться.

Python 2.7.15+

Версия Python по умолчанию будет использоваться всеми сценариями, которые установлены в качестве интерпретатора в строке сценария shebang.

В некоторых дистрибутивах Linux установлено несколько версий Python одновременно. Обычно двоичный файл Python 3 называется, python3а двоичный файл Python 2 – python или python2, но это не всегда так. Вы можете проверить, установлен ли Python 3, набрав:

python3 --version

 

Python 3.6.8

Хотя Python 2 хорошо поддерживается и активен, Python 3 считается настоящим и будущим языка.

На момент написания этой статьи, последним основным выпуском Python является версия 3.7.x. Скорее всего, в вашей системе установлена более старая версия Python 3. Если вы хотите установить последнюю версию, процедура зависит от операционной системы, которую вы используете.

 

Python 2 и Python 3 принципиально разные. Код, написанный на Python 2.x, может не работать в Python 3.x.

Модуль sys, который доступен во всех версиях Python, предоставляет параметры и системные функции конкретного. sys.version_info позволяет определить версию Python, установленную в системе. Это кортеж, который содержит пять номеров версий: major, minor, micro, releaselevel и serial.

Допустим, у вас есть скрипт, который требует как минимум Python версии 3.5, и вы хотите проверить, соответствует ли система требованиям. Вы можете сделать это, просто проверив версии major и minor:

import sys

if not sys.version_info.major == 3 and sys.version_info.minor >= 5:
    print("Этот скрипт требует Python 3.5 или выше!")
    print("Вы используете Python {}.{}.".format(sys.version_info.major, sys.version_info.minor))
    sys.exit(1)

Если вы запустите скрипт, используя версию Python менее 3.5, он выдаст следующий вывод:

Этот скрипт требует Python 3.5 или выше!
Вы используете Python 2.7.

Чтобы написать код Python, который работает под Python 3 и 2, используйте модуль future. Это позволяет вам запускать Python 3.x-совместимый код под Python 2.

 

Узнать, какая версия Python установлена ​​в вашей системе, очень просто, просто введите python –version.

Не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Как проверить, какая версия Python работает в моем скрипте? — python

Как я могу проверить, какая версия интерпретатора Python интерпретирует мой сценарий?

python

version

Поделиться

Источник


carrier    

07 июля 2009 в 16:17

19 Ответов




1199

Эта информация доступна в строке sys.version модуля sys :

>>> import sys

Удобочитаемый:

>>> print(sys.version)  # parentheses necessary in python 3.       
2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]

Для дальнейшей обработки:

>>> sys.version_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192

Чтобы обеспечить выполнение сценария с минимальным требованием к версии интерпретатора Python, добавьте это в свой код:

assert sys.version_info >= (2, 5)

При этом сравниваются основные и второстепенные сведения о версии. Добавьте micro (= 0 , 1 и т. д.) и даже releaselevel (= 'alpha' , 'final' и т. д.) В кортеж , как вам нравится. Однако обратите внимание, что почти всегда лучше проверить, есть ли определенная функция, и если нет, то обходной путь (или спасение). Иногда функции исчезают в более новых версиях, заменяясь другими.

Поделиться


krawyoti    

07 июля 2009 в 16:20



322

Из командной строки (обратите внимание на заглавную ‘V’):

python -V

Это задокументировано в ‘man python’.

Поделиться


jcolino    

22 июля 2013 в 19:50


Поделиться


brianz    

10 июня 2010 в 20:08




62

Ваш лучший выбор, вероятно, что-то вроде этого:

>>> import sys
>>> sys.version_info
(2, 6, 4, 'final', 0)
>>> if not sys.version_info[:2] == (2, 6):
...    print "Error, I need python 2.6"
... else:
...    from my_module import twoPointSixCode
>>> 

Кроме того, вы всегда можете обернуть импорт в простую попытку, которая должна поймать синтаксические ошибки. И, к моменту @Heikki’s, этот код будет совместим с гораздо более старыми версиями python:

>>> try:
...     from my_module import twoPointSixCode
... except Exception: 
...     print "can't import, probably because your python is too old!"
>>>

Поделиться


Seth    

10 июня 2010 в 16:06



54

Используйте platform ‘s python_version из stdlib:

>>> from platform import python_version
>>> print(python_version())
2.7.8

Поделиться


Bill    

25 августа 2014 в 01:11



46

Поставь что-нибудь вроде:

#!/usr/bin/env/python
import sys
if sys.version_info<(2,6,0):
  sys.stderr.write("You need python 2.6 or later to run this script\n")
  exit(1)

в верхней части вашего сценария.

Обратите внимание, что в зависимости от того, что еще есть в вашем скрипте, более старые версии python, чем целевой объект, могут даже не загружать скрипт, поэтому не будет достаточно далеко, чтобы сообщить об этой ошибке. В качестве обходного решения можно выполнить описанное выше в сценарии, который импортирует сценарий с более современным кодом.

Поделиться


rjmunro    

10 июня 2010 в 16:08




22

Вот короткая версия командной строки, которая сразу же завершается (удобно для сценариев и автоматического выполнения):

python -c "print(__import__('sys').version)"

Или просто мажор, минор и микро:

python -c "print(__import__('sys').version_info[:1])" # (2,)
python -c "print(__import__('sys').version_info[:2])" # (2, 7)
python -c "print(__import__('sys').version_info[:3])" # (2, 7, 6)

Поделиться


Wolph    

02 сентября 2014 в 20:02



7

С модулем six , вы можете сделать это путем:

import six

if six.PY2:
  # this is python2.x
else:
  # six.PY3
  # this is python3.x

Поделиться


Dzhuang    

20 октября 2017 в 02:36



6

Просто введите python в свой terminal, и вы увидите версию
как хотелось бы следующего

desktop:~$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Поделиться


cjahangir    

09 февраля 2016 в 14:11




5

Как сказал Сет, основной скрипт может проверить sys.version_info (но обратите внимание, что это не появилось до 2.0, поэтому, если вы хотите поддерживать более старые версии, вам нужно будет проверить другое свойство версии модуля sys).

Но вам все равно нужно позаботиться о том, чтобы не использовать какие-либо языковые функции Python в файле, которые недоступны в более старых версиях Python. Например, это разрешено в Python 2.5 и более поздних версиях:

try:
    pass
except:
    pass
finally:
    pass

но не будет работать в более старых версиях Python, потому что вы могли бы только за исключением OR окончательно соответствовать попытке. Так что для совместимости с более старыми версиями Python вам нужно написать:

try:
    try:
        pass
    except:
        pass
finally:
    pass

Поделиться


Heikki Toivonen    

10 июня 2010 в 16:12



4

import sys
sys.version.split(' ')[0]

sys.version дает вам то, что вы хотите, просто выберите первое число 🙂

Поделиться


fengshaun    

07 июля 2009 в 16:20



3

Проверьте версию Python: python -V или python --version или apt-cache policy python

вы также можете запустить whereis python , чтобы посмотреть, сколько версий установлено.

Поделиться


Shusen Yi    

11 апреля 2018 в 02:01



Поделиться


DevPlayer    

11 октября 2011 в 18:40



2

Несколько ответов уже подсказывают, как запросить текущую версию python. Чтобы проверить программно требования к версии, я бы использовал один из следующих двух методов:

# Method 1: (see krawyoti's answer)
import sys
assert(sys.version_info >= (2,6))

# Method 2: 
import platform
from distutils.version import StrictVersion 
assert(StrictVersion(platform.python_version()) >= "2.6")

Поделиться


normanius    

16 ноября 2017 в 02:25



1

Просто для удовольствия, ниже приведен способ сделать это на CPython 1.0-3.7b2, Pypy, Jython и Micropython. Это скорее любопытство, чем способ сделать это в современном коде. Я написал его как часть http://stromberg.dnsalias.org / ~strombrg / pythons/ , который представляет собой скрипт для тестирования фрагмента кода на многих версиях python сразу, так что вы можете легко получить представление о том, какие функции python совместимы с какими версиями python:

via_platform = 0
check_sys = 0
via_sys_version_info = 0
via_sys_version = 0
test_sys = 0
try:
    import platform
except (ImportError, NameError):
    # We have no platform module - try to get the info via the sys module
    check_sys = 1

if not check_sys:
    if hasattr(platform, "python_version"):
        via_platform = 1
    else:
        check_sys = 1

if check_sys:
    try:
        import sys
        test_sys = 1
    except (ImportError, NameError):
        # just let via_sys_version_info and via_sys_version remain False - we have no sys module
        pass

if test_sys:
    if hasattr(sys, "version_info"):
        via_sys_version_info = 1
    elif hasattr(sys, "version"):
        via_sys_version = 1
    else:
        # just let via_sys remain False
        pass

if via_platform:
    # This gives pretty good info, but is not available in older interpreters.  Also, micropython has a
    # platform module that does not really contain anything.
    print(platform.python_version())
elif via_sys_version_info:
    # This is compatible with some older interpreters, but does not give quite as much info.
    print("%s.%s.%s" % sys.version_info[:3])
elif via_sys_version:
    import string
    # This is compatible with some older interpreters, but does not give quite as much info.
    verbose_version = sys.version
    version_list = string.split(verbose_version)
    print(version_list[0])
else:
    print("unknown")

Поделиться


dstromberg    

16 марта 2018 в 01:05




1

sys.version_info , похоже, не возвращает tuple по состоянию на 3.7. Скорее, он возвращает специальный класс, поэтому все примеры с использованием кортежей не работают, по крайней мере для меня. Вот выходные данные из консоли python:

>>> import sys
>>> type(sys.version_info)
<class 'sys.version_info'>

Я обнаружил, что достаточно использовать комбинацию sys.version_info.major и sys.version_info.minor . Например,…

import sys
if sys.version_info.major > 3:
    print('Upgrade to Python 3')
    exit(1)

проверяет, работаете ли вы с Python 3. Вы даже можете проверить наличие более конкретных версий с помощью…

import sys
ver = sys.version_info
if ver.major > 2:
    if ver.major == 3 and ver.minor <= 4:
        print('Upgrade to Python 3.5')
        exit(1)

можно проверить, работает ли у вас хотя бы Python 3.5.

Поделиться


Parker E.    

06 октября 2018 в 11:38



0

Чтобы проверить версию Python для команд на Windows, выполните следующие команды в командной строке и проверьте выходные данные

c:\>python -V
Python 2.7.16

c:\>py -2 -V
Python 2.7.16

c:\>py -3 -V
Python 3.7.3

Кроме того, чтобы просмотреть конфигурацию папок для каждой версии Python, выполните следующие команды:

For Python 2,'py -2 -m site'
For Python 3,'py -3 -m site'

Поделиться


Aamir M Meman    

02 апреля 2019 в 17:13



0

Если вы хотите обнаружить pre-Python 3 и не хотите ничего импортировать…

..

.

вы можете (ab)использовать изменения области понимания списка и сделать это в одном выражении :

is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)

Поделиться


Mehrdad    

15 октября 2018 в 23:01




-1

Если вы работаете на linux просто дайте команду python вывод будет таким

Python 2.4.3 (#1, 11 июня 2009, 14:09:37)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] на linux2

Введите «help», «copyright», «credits» или «license» для получения дополнительной информации
информация.

Поделиться


pkm    

16 июля 2013 в 09:10


Похожие вопросы:

Как контролировать, какая версия Python запускается при двойном щелчке файла?

Есть ли способ контролировать, какая версия python запускается при двойном щелчке по файлу py? Из командной строки и в средах, таких как eclipse я могу контролировать, какая версия запускается. Но…

Как проверить, какая версия jQuery загружена?

Как проверить, какая версия jQuery загружена на клиентском компьютере? Возможно, клиент загрузил jQuery, но я не знаю, как это проверить. Если они его загрузили как я могу проверить версию и префикс…

Как проверить, какая версия Ember.js загружается?

Как я могу проверить в консоли браузера, какая версия Ember.js загружена? Я знаю, что могу проверить его в коде библиотеки, на его вершине /*! * @overview Ember — JavaScript Application Framework *…

Как я могу проверить, какая версия babel находится на моей ОС windows 10?

Мне нужна помощь, чтобы найти, какая версия Babel находится на моей машине Windows. Я установил его с помощью npm install —save-dev babel-cli babel-preset-env. Как я могу проверить, какая версия…

Как можно программно проверить, какая версия WMI установлена

Как можно программно проверить, какая версия WMI (Windows Management Instrumentation) установлена с помощью delphi или C# ? Спасибо заранее.

Какая версия Python у меня установлена?

Я должен запустить сценарий Python на сервере Windows. Как я могу узнать, какая версия Python у меня есть, и действительно ли это имеет значение? Я думал об обновлении до последней версии Python.

В Linux Как проверить через скрипты, какая версия Java установлена?

альтернативный —конфиг обновлен java-версия работает Как проверить, установлен ли java, если установлен java и какая версия. Что такое правильный путь.

Как проверить, какая версия Java, Maven, Gradle

Как проверить, какая версия Java, Maven, Gradle, NodeJs установлена на вашем компьютере и как установить переменные среды для всех этих строительных инструментов или JDK ?

Как узнать, какая версия CoreOS работает на данной машине

Я могу ssh к коробке под управлением CoreOS, но, похоже, не могу найти способ проверить, какая версия CoreOS работает там. В документации тоже ничего найти не удалось.

Какая версия пакетов, перечисленных в файле my composer.json, установлена?

Как я могу сказать, какая версия виджета установлена в моем проекте? Я использую фреймворк yii2 и composer для обработки зависимостей пакетов. Есть ли способ проверить, какая версия пакетов,…

Выход стабильной версии Python 3.9.0 / Хабр

Сегодня, 05.10.2020 ожидается выход стабильной версии Python 3.9.0. Новая версия будет получать обновления с исправлениями примерно каждые 2 месяца в течение примерно 18 месяцев. Через некоторое время после выпуска финальной версии 3.10.0 будет выпущено девятое и последнее обновление с исправлением ошибок 3.9.

«This is the first version of Python to default to the 64-bit installer on Windows. The installer now also actively disallows installation on Windows 7.»
«Это первая версия Python, по умолчанию использующая 64-разрядный установщик в Windows. Программа установки теперь также запрещает установку в Windows 7.»

Я прочитал примечания к выпуску Python 3.9 и связанные с ними обсуждения. Основываясь на информации, я хотел написать исчерпывающее руководство, чтобы каждый мог получить представление о функциях вместе с их подробной работой.

UPD:

Переход на стабильные годовые циклы выпуска, см. PEP 602
alec_kalinin
«Каждая новая версия Python теперь будет выходить в октябре. Python 3.10 выйдет в октябре 2021, Python 3.11 в октябре 2022. А каждые два месяца будет выходить бакфикс. Для меня это великолепная новость, теперь можно четко планировать upgrade python окружения.»

PEP 584

Этот PEP предлагает добавить операторы слияния ( | ) и обновления ( | = ) во встроенный класс dict.

Для слияния: |

>>> a = {'milk': 'prostokvashino', 'сheese': 'cheddar'} 
>>> b = {'milk': 1, 'сheese': 2, 'bread': 3} 
>> > а | b 
{'milk': 1, 'сheese': 2, 'bread': 3}
>>> b | a 
{'milk': 'prostokvashino', 'сheese': 'cheddar', 'bread': 3}

Для обновления: |=

>>> a | = b 
>>> a 
{'milk': 1, 'сheese': 2, 'bread': 3}

Ключевое правило, которое следует запомнить, заключается в том, что если есть какие-либо конфликты ключей, то самое правое значение будет сохранено.

Безусловно, у многих питонистов возникнет вопрос, зачем это нужно, если уже есть привычный всем вариант

{**d1, **d2}

На этот вопрос был дан ответ в самом PEP:

Распаковка словарей выглядит некрасиво, и ее нелегко обнаружить. Мало кто сможет догадаться, что это означает, когда они впервые увидят это.

Как сказал Гвидо:

Прошу прощения за PEP 448, но даже если вы знаете о ** d в более простом контексте, если бы вы спросили типичного пользователя Python, как объединить два dict в новый, я сомневаюсь, что многие люди подумают о {**d1, **d2}. Я знаю, что сам забыл об этом, когда началась эта ветка!

Также {**d1, **d2} не работает для подклассов dict, таких как defaultdict

PEP 585

Generics подсказки типов в стандартных коллекциях.

Generic — тип, который можно параметризовать, некий контейнер. Также известен как параметрический тип или универсальный тип.

В выпуске включена поддержка универсального синтаксиса во всех стандартных коллекциях, доступных в настоящее время в модуле «Typing». Мы можем использовать типы list или dict в качестве универсальных типов вместо использования typing.List или typing.Dict.

Было:

from typing import List

a: List[str] = list()

def read_files(files: List[str]) -> None:
    pass

Стало:

a: list[str] = list()

def read_files(files: list[str]) -> None:
    pass

Полный список типов

tuple

list

dict

set

frozenset

type

collections.deque

collections.defaultdict

collections.OrderedDict

collections.Counter

collections.ChainMap

collections.abc.Awaitable

collections.abc.Coroutine

collections.abc.AsyncIterable

collections.abc.AsyncIterator

collections.abc.AsyncGenerator

collections.abc.Iterable

collections.abc.Iterator

collections.abc.Generator

collections.abc.Reversible

collections.abc.Container

collections.abc.Collection

collections.abc.Callable

collections.abc.Set # typing.AbstractSet

collections.abc.MutableSet

collections.abc.Mapping

collections.abc.MutableMapping

collections.abc.Sequence

collections.abc.MutableSequence

collections.abc.ByteString

collections.abc.MappingView

collections.abc.KeysView

collections.abc.ItemsView

collections.abc.ValuesView

contextlib.AbstractContextManager # вместо typing.ContextManager

contextlib.AbstractAsyncContextManager # вместо typing.AsyncContextManager

re.Pattern # вместо typing.Pattern, typing.re.Pattern

re.Match # вместо typing.Match, typing.re.Match

PEP 615

Поддержка базы данных часовых поясов IANA в стандартной библиотеке.

IANA часовые пояса часто называют tz или zone info. Существует большое количество часовых поясов IANA с разными путями поиска для указания часового пояса IANA для объекта даты и времени. Например, мы можем передать имя пути поиска как Континент/Город datetime объекту, чтобы установить его tzinfo.

dt: datetime = datetime(2000, 01, 25, 01, tzinfo=ZoneInfo("Europe/London"))

Если мы передадим неверный ключ, будет вызвано исключение

zoneinfo.ZoneInfoNotFoundError

PEP 616

Новые строковые функции для удаления префикса и суффикса.

К str объекту добавлены две новые функции.

  • Первая функция удаляет префикс.
    str.removeprefix(prefix)
  • Вторая функция удаляет суффикс.
    str.removesuffix(suffix)
>>> 'hello_world'.removeprefix ('hello_') 
world
>>> 'hello_world'.removesuffix ('_world') 
hello

PEP 617

Версия Python 3.9 предлагает заменить текущий синтаксический анализатор Python на основе LL (1) новым синтаксическим анализатором на основе PEG, который является высокопроизводительным и стабильным.

Текущий парсер CPython основан на LL (1). Впоследствии грамматика основана на LL (1), что позволяет анализировать ее с помощью анализатора LL (1). Парсер LL (1) работает сверху вниз. Кроме того, он анализирует входные данные слева направо. Текущая грамматика является контекстно-свободной грамматикой, поэтому контекст токенов не принимается во внимание.

Версия Python 3.9 предлагает заменить его новым парсером на основе PEG, что означает, что он снимет текущие ограничения Python грамматики LL (1). Кроме того, в текущий синтаксический анализатор внесены исправления, в которые добавлен ряд хаков, которые будут удалены. В результате это снизит стоимость обслуживания в долгосрочной перспективе.

Например, хотя синтаксические анализаторы и грамматики LL (1) просты в реализации, ограничения не позволяют им выражать общие конструкции естественным образом для разработчика языка и читателя. Парсер смотрит только на один токен вперед, чтобы различать возможности.

issue30966

Возможность отмены одновременных фьючерсов.

Новый параметр cancel_futures был добавлен в concurrent.futures.Executor.shutdown().

В этом параметре все отложенные фьючерсы, которые еще не начались. До версии 3.9 процесс ожидал их завершения перед завершением работы исполнителя.

Новый параметр cancel_futures был добавлен в ThreadPoolExecutor и ProcessPoolExecutor. Он работает, когда значение параметра равно True, тогда все ожидающие фьючерсы будут отменены при вызове функции shutdown().

Когда shutdown() выполняется, интерпретатор проверяет, не собран ли исполнитель сборщиком мусора. Если он все еще находится в памяти, он получает все ожидающие обработки элементы, а затем отменяет фьючерсы.

issue30966

В этом выпуске в библиотеку asyncio и multiprocessing был внесен ряд улучшений.

Например,

  1. reuse_address параметр asyncio.loop.create_datagram_endpoint() больше не поддерживаются из-за значительных проблем в области безопасности.
  2. Добавлены новые coroutines, shutdown_default_executor() и сопрограммы asyncio.to_thread(). Новый вызов asyncio.to_thread() используется для запуска функций, связанных с вводом-выводом, в отдельном потоке, чтобы избежать блокировки цикла событий.

Что касается улучшений библиотеки multiprocessing, в класс multiprocessing.SimpleQueue был добавлен новый метод close().

Этот метод явно закрывает очередь. Это гарантирует, что очередь будет закрыта и не останется дольше ожидаемого. Важно помнить, что методы get(), put(), empty() нельзя вызывать после закрытия очереди.

issue37444

Исправление ошибки импорта пакетов.

Основная проблема с импортом библиотек Python до выпуска 3.9 заключалась в несогласованном поведении импорта в Python, когда относительный импорт проходил мимо его пакета верхнего уровня.

builtins.__import__() вызывал ValueError то время как importlib.__import__() вызывал ImportError.

Сейчас это исправлено, . __Import __ () теперь вызывает ImportError вместо ValueError.

issue40286

Генерация случайных байтов.

Еще одна функция, которая была добавлена ​​в версии 3.9, — это random.Random.randbytes(). Она может использоваться для генерации случайных байтов.

Мы можем генерировать случайные числа, но что, если нам нужно было генерировать случайные байты? До версии 3.9 разработчикам приходилось проявлять изобретательность, чтобы генерировать случайные байты. Хотя мы можем использовать, os.getrandom(), os.urandom() или secrets.token_bytes() но не можем генерировать псевдослучайные шаблоны.

Например, чтобы гарантировать, что случайные числа генерируются с ожидаемым поведением и процесс воспроизводится, мы обычно используем seed с модулем random.Random.

В результате был введен метод random.Random.randbytes(). Он генерирует случайные байты.

issue28029

Исправление функции замены строки.

Принцип работы функции replace заключается в том, что для заданного максимального аргумента замены вхождения она заменяет набор символов из строки новым набором символов.

Чтобы дополнительно объяснить проблему, до версии 3.9 функция replace имела несогласованное поведение:

Можно было бы ожидать увидеть blog

"" .replace ("", "blog", 1) 
>>> '' 

Можно было бы ожидать увидеть |

"" .replace ("", "|", 1) 
>>> '' 
"" .replace ("", "prefix") 
>>> 'prefix'
issue39648, issue39479, issue39288, issue39310

Изменения в модуле «math».

Возвращает наименьшее общее кратное целых аргументов:

>>> import  math 
>>> math.lcm(48,72,108) 
432

Возвращает наибольший общий делитель целочисленных аргументов. В более ранней версии поддерживалось только два аргумента. Добавлена ​​поддержка произвольного количества аргументов:

>>> import  math 
>>> math.gcd(9,12,21) 
3

Вычисляет ближайшее к «x» число с плавающей точкой, если двигаться в направлении «y«.

>>> math.nextafter(2, -1)
1.9999999999999998

Этот метод возвращает значение младшего бита числа с плавающей запятой x.

>>> 1 - math.ulp(1)
0.9999999999999998
>>> math.nextafter(1, -1) + math.ulp(1)
1.0
issue38870

В модуль ast добавили метод unparse.
Новый метод может использоваться для создания строки с кодом и его последующего выполнения.

>>> import ast
>>> parsed = ast.parse('from sys import platform; print(platform)')
>>> unparsed_str = ast.unparse(parsed)
>>> print(unparsed_str)
from sys import platform
print(platform)
>>> exec(unparsed_str)
win32
issue39507, issue39509

Добавление новых кодов в http.HTTPStatus.

«Сохранить 418!»

418 IM_A_TEAPOT
103 EARLY_HINTS
425 TOO_EARLY

UPD:

PEP 614

Ослабление грамматических ограничений для декораторов.

Было:

buttons = [QPushButton(f'Button {i}') for i in range(10)]

button_0 = buttons[0]

@button_0.clicked.connect
def spam():
    ...

button_1 = buttons[1]

@button_1.clicked.connect
def eggs():
    ...

То теперь можно убрать лишние присваивания и вызывать напрямую:

buttons = [QPushButton(f'Button {i}') for i in range(10)]

@buttons[0].clicked.connect
def spam():
    ...

@buttons[1].clicked.connect
def eggs():
    ...

«Кортеж должен быть заключен в круглые скобки»

Это основано на видении Гвидо в том же письме. Цитата:

Но запятых я не допущу. Я не могу согласиться с этим

@f, g
def pooh(): ...

Это может привести неопытных программистов к выводу, что таким способом можно вызывать несколько декораторов подряд. Скобки необходимы, чтобы все прояснить без дополнительных ограничений или сложного синтаксиса.

issue17005

Новый модуль graphlib предоставляет функциональные возможности для топологической сортировки графа хешируемых узлов.
Подробнее можно ознакомиться в документации.

UPD: ifinik

>>> from graphlib import TopologicalSorter 
>>> graph = {'E': {'C', 'F'}, 'D': {'B', 'C'}, 'B': {'A'}, 'A': {'F'}} 
>>> ts = TopologicalSorter(graph) 
>>> tuple(ts.static_order()) 
('C', 'F', 'E', 'A', 'B', 'D')
>>> tuple(ts.static_order())
('F', 'C', 'A', 'E', 'B', 'D')

Граф можно передавать не сразу, а заполнять TopologicalSorter с помощью метода add. Кроме того класс адаптирован к параллельным вычислениям и может быть использован, например, для создания очереди задач.

issue37630, issue40479

Обновление библиотеки hashlib.
Теперь hashlib может использовать хэши SHA3 и SHAKE XOF из OpenSSL.
Встроенные хэш-модули теперь могут быть отключены или выборочно включены, например, для принудительного использования реализации на основе OpenSSL.

Оптимизация

Сводка улучшений производительности от Python 3.4 до Python 3.9:

Python version                       3.4     3.5     3.6     3.7     3.8    3.9
--------------                       ---     ---     ---     ---     ---    ---

Variable and attribute read access:
    read_local                       7.1     7.1     5.4     5.1     3.9    4.0
    read_nonlocal                    7.1     8.1     5.8     5.4     4.4    4.8
    read_global                     15.5    19.0    14.3    13.6     7.6    7.7
    read_builtin                    21.1    21.6    18.5    19.0     7.5    7.7
    read_classvar_from_class        25.6    26.5    20.7    19.5    18.4   18.6
    read_classvar_from_instance     22.8    23.5    18.8    17.1    16.4   20.1
    read_instancevar                32.4    33.1    28.0    26.3    25.4   27.7
    read_instancevar_slots          27.8    31.3    20.8    20.8    20.2   24.5
    read_namedtuple                 73.8    57.5    45.0    46.8    18.4   23.2
    read_boundmethod                37.6    37.9    29.6    26.9    27.7   45.9

Variable and attribute write access:
    write_local                      8.7     9.3     5.5     5.3     4.3    4.2
    write_nonlocal                  10.5    11.1     5.6     5.5     4.7    4.9
    write_global                    19.7    21.2    18.0    18.0    15.8   17.2
    write_classvar                  92.9    96.0   104.6   102.1    39.2   43.2
    write_instancevar               44.6    45.8    40.0    38.9    35.5   40.7
    write_instancevar_slots         35.6    36.1    27.3    26.6    25.7   27.7

Data structure read access:
    read_list                       24.2    24.5    20.8    20.8    19.0   21.1
    read_deque                      24.7    25.5    20.2    20.6    19.8   21.6
    read_dict                       24.3    25.7    22.3    23.0    21.0   22.5
    read_strdict                    22.6    24.3    19.5    21.2    18.9   21.6

Data structure write access:
    write_list                      27.1    28.5    22.5    21.6    20.0   21.6
    write_deque                     28.7    30.1    22.7    21.8    23.5   23.2
    write_dict                      31.4    33.3    29.3    29.2    24.7   27.8
    write_strdict                   28.4    29.9    27.5    25.2    23.1   29.8

Stack (or queue) operations:
    list_append_pop                 93.4   112.7    75.4    74.2    50.8   53.9
    deque_append_pop                43.5    57.0    49.4    49.2    42.5   45.5
    deque_append_popleft            43.7    57.3    49.7    49.7    42.8   45.5

Timing loop:
    loop_overhead                    0.5     0.6     0.4     0.3     0.3    0.3

Сценарий теста отображает время в наносекундах. Тесты были выполнены на процессоре Intel Core i7-4960HQ. Код теста можно найти в репозитории по адресу «Tools/scripts/var_access_benchmark.py».

Благодарю за внимание.

Ссылка на официальное руководство Python 3.9.

Отпишитесь в комментарии, если что-то было упущено.

Как проверить версию python anaconda, установленную на ПК Windows 10? — python

У меня есть Windows 10 PC с установленным python anaconda. Последняя версия anaconda — это v5.0.1

Я хотел бы узнать, установлена ли PC последняя версия v5.0.1 и является ли она 32-bit/64bit или python 2.7/3.6. Как мне это сделать?

https://www.anaconda.com/download/

python

anaconda

Поделиться

Источник


user1315789    

19 января 2018 в 13:21

2 Ответа




25

В командной строке anaconda выполните команду

conda -V чтобы получить версию conda.

python --version , чтобы получить версию python.

conda list anaconda$ , чтобы получить версию Anaconda.

conda list чтобы получить имя, версию, постройте & Channel details всех установленных пакетов (в текущей среде).

conda info чтобы получить все текущие сведения о среде.

conda info --envs чтобы просмотреть список всех ваших сред

Подробное описание здесь, скачать шпаргалку можно отсюда

Поделиться


Shijith    

26 сентября 2018 в 16:56



4

Папка, содержащая вашу установку Anaconda, содержит подпапку под названием conda-meta с файлами json для всех установленных пакетов, включая один для самого Anaconda. Ищите anaconda-<version>-<build>.json .

Мой файл называется anaconda-5.0.1-py27hdb50712_1.json , и в нижней части находится дополнительная информация о версии:

"installed_by": "Anaconda2-5.0.1-Windows-x86_64.exe", 
"link": { "source": "C:\\ProgramData\\Anaconda2\\pkgs\\anaconda-5.0.1-py27hdb50712_1" }, 
"name": "anaconda", 
"platform": "win", 
"subdir": "win-64", 
"url": "https://repo.continuum.io/pkgs/main/win-64/anaconda-5.0.1-py27hdb50712_1.tar.bz2", 
"version": "5.0.1"

(Слегка отредактировано для краткости.)

Выход из conda -V — это версия conda.

Поделиться


kthy    

19 января 2018 в 13:27


Похожие вопросы:

Обновление корневой Python Anaconda до более новой минорной версии на Windows ничего не делает

У меня есть Anaconda (не miniconda) Python 2.7 установить на Windows. Я хотел бы обновить версию Python, установленную до последней минорной версии (2.7.9), которая, как я вижу, доступна в каналах,…

Как я могу получить доступ к другой среде Anaconda из Pycharm (на Windows 10)

Я установил anaconda с python 3.5 и создал новую среду с Python 2.7 (на windows 10). Я могу легко изменить среду Anaconda с помощью инструмента командной строки. Однако в Pycharm, когда я пытаюсь…

Как увидеть версию pig, установленную на Hadoop

Я пытаюсь проверить версию PIG, установленную на моем hadoop. Как мы можем увидеть версию pig, установленную на Hadoop? Есть ли какая-нибудь команда, чтобы увидеть это?

Установка opencv на Windows 10 с python 3.6 и anaconda 3.6

Как установить opencv с python 3.6 и anaconda 3.6? Я попробовал conda install -c https://conda.binstar.org/menpo opencv3 но я получаю следующую ошибку: UnsatisfiableError: The following…

Как открыть навигатор Anaconda с помощью Windows 10

Я хотел добраться до навигатора Anaconda. Недавно на обычном ПК я открыл его и использовал его, как будто я использовал его всю свою жизнь, дело в том, что этот PC использует Windows 7. Мой ноутбук,…

Как проверить версию anaconda на mac?

Я установил anaconda некоторое время назад, и я хочу знать, нужно ли мне повторно установить его, чтобы догнать новые обновления. Однако я не знаю, как проверить текущую версию anaconda В командной…

Как я могу выполнить сценарии Python, используя версию Anaconda Python?

Я недавно скачал дистрибутив Anaconda для Python. Я заметил, что если я напишу и выполню сценарий Python (дважды щелкнув по его значку), Мой компьютер (работающий на Windows 8) выполнит его,…

Как проверить установленную версию spaCy?

Я установил spaCy с python для моего проекта NLP. Я установил это с помощью pip . Как я могу проверить установленную версию spaCy? с помощью pip install -U spacy Что такое команда для проверки…

Как использовать python с помощью anaconda?

Я установил anaconda для python 3.7 в моем windows 10 ПК. Когда я вставляю python в gitBash , он говорит: bash: python: command not found Как я могу использовать python глобально? Так что я могу…

Как установить xgboost в Anaconda Python (платформа Windows)?

Я новый пользователь Python. Я скачал последнюю версию Anaconda 3 2.4.1 (Python 3.5) по ссылке ниже: https://www.continuum.io/downloads Мои конфигурации ПК: Windows 10, 64 бит, 4 ГБ RAM Я потратил…

Как узнать текущее время в Python — python

Модуль time

Модуль time предоставляет функции, которые сообщают нам время в «seconds since the epoch», а также другие утилиты.

import time

Unix Эпоха Времени

Это формат, в котором вы должны получить метки времени для сохранения в базах данных. Это простое число с плавающей запятой, которое можно преобразовать в целое число. Он также хорош для арифметики в секундах, поскольку представляет собой количество секунд с 1 января 1970 года 00:00:00, и это Свет памяти относительно других представлений времени, которые мы рассмотрим далее:

>>> time.time()
1424233311.771502

Этот параметр timestamp не учитывает високосные секунды, поэтому он не линейный-високосные секунды игнорируются. Таким образом, хотя он и не эквивалентен международному стандарту UTC, он близок, и поэтому вполне хорош для большинства случаев ведения учета.

Однако это не идеально для человеческого планирования. Если у вас есть будущее событие, которое вы хотите иметь место в определенный момент времени, вы захотите сохранить это время со строкой, которая может быть проанализирована в объект datetime или сериализованный объект datetime (они будут описаны позже).

time.ctime

Вы также можете представить текущее время так, как это предпочтительно для вашей операционной системы (что означает, что оно может измениться, когда вы измените свои системные настройки, поэтому не полагайтесь на то, что это будет стандартным для всех систем, как я видел, ожидали другие). Это обычно удобно для пользователя, но обычно не приводит к тому, что строки можно сортировать в хронологическом порядке:

>>> time.ctime()
'Tue Feb 17 23:21:56 2015'

Вы также можете гидратировать временные метки в удобочитаемую форму с помощью ctime :

>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'

Это преобразование также не подходит для ведения записей (за исключением текста, который будет разбираться только людьми — и с улучшенным оптическим распознаванием символов и искусственным интеллектом, я думаю, что число таких случаев уменьшится).

Модуль datetime

Модуль datetime также весьма полезен здесь:

>>> import datetime

datetime.datetime.now

datetime.now -это метод класса, который возвращает текущее время. Он использует time.localtime без timezone информации (если не указано, в противном случае см. timezone aware ниже). Он имеет представление (которое позволило бы вам воссоздать эквивалентный объект), отраженное на shell, но при печати (или принудительном приведении к str ) он находится в удобочитаемом (и почти ISO) формате, и лексикографическая сортировка эквивалентна хронологической сортировке:

>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461

datetime-е utcnow

Вы можете получить объект datetime в UTC времени, глобальный стандарт, сделав это:

>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988

UTC-это временной стандарт, который почти эквивалентен GMT timezone. (В то время как GMT и UTC не изменяются на летнее время, их пользователи могут переключаться на другие часовые пояса, такие как британское летнее время, в течение лета.)

datetime timezone осведомлен

Однако ни один из объектов datetime, созданных нами до сих пор, не может быть легко преобразован в различные часовые пояса. Мы можем решить эту проблему с помощью модуля pytz :

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

Аналогично, в Python 3 мы имеем класс timezone с прикрепленным экземпляром utc timezone , который также делает объект timezone осведомленным (но преобразование в другой timezone без удобного модуля pytz остается в качестве упражнения для читателя):

>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)

И мы видим, что мы можем легко преобразовать в часовые пояса из исходного объекта utc.

>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00

Вы также можете сделать наивный объект datetime осведомленным с помощью метода pytz timezone localize или путем замены атрибута tzinfo (с помощью replace , это делается вслепую), но это скорее крайние меры, чем рекомендации:

>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)

Модуль pytz позволяет нам сделать наши объекты datetime timezone осведомленными и преобразовать время в сотни часовых поясов, доступных в модуле pytz .

Можно было бы якобы сериализовать этот объект в течение UTC времени и сохранить его в базе данных, но это потребовало бы гораздо больше памяти и было бы более подвержено ошибкам, чем простое хранение времени Unix эпохи, которое я продемонстрировал сначала.

Другие способы просмотра времени гораздо более подвержены ошибкам, особенно при работе с данными, которые могут поступать из разных часовых поясов. Вы хотите, чтобы не было путаницы относительно того, для чего timezone был предназначен строковый или сериализованный объект datetime.

Если вы показываете время с помощью Python для пользователя, ctime прекрасно работает, но не в таблице (обычно она плохо сортируется), а, возможно, в часах. Тем не менее, я лично рекомендую, при общении с течением времени в Python, либо используя Unix время, или timezone известно UTC datetime объекта.

Определение формата файла с помощью Python / Хабр

Предыстория

Всем привет. Совсем недавно я столкнулся с проблемой: по необьяснимым причинам карта памяти начала забрасывать все файлы в папку LOST.DIR без расширений. За долгое время там накопилось более 500 файлов разного типа: картинки, видео, аудио, документы. Самостоятельно понять формат файла было невозможным, по этому я стал искать способ решения этой проблемы программным путем.

Поиск решений

Мне не хотелось использовать готовые решения в виде веб-сервисов или программ, по этому появилась мысль написать консольную утилиту, которая бы прошлась по всем файлам и устанавливала расширения автоматически. Для написания утилиты был выбран Python. Поиск подходящих модулей и библиотек так и не принес результатов по нескольким причинам:

  1. Отсутствие поддержки со стороны разработчика
  2. Излишний функционал
  3. Отсутствие поддержки новых версий Python’a
  4. Излишняя усложненность кода

Из множества библиотек сильно выделялась python-magic (почти 1000 звезд на ГитХабе), которая является оберткой библиотеки libmagic. Но использование ее под Windows невозможно без DLL для Unix’овой библиотеки. Меня такой вариант не устроил.

Решение задачи

Исходя из вышеперечисленного, я решил не использовать сторонние библиотеки и модули и решить проблему без них. После недолгого поиска информации о том, как реализовать данную задачу, единственным верным способом оказался определение формата по сигнатуре файла.

Сигнатура файла представляет собой набор байтов, обеспечивающий определение формата файла. Сигнатура имеет следующий вид в шестнадцатеричной системе счисления:

50 4D 4F 43 43 4D 4F 43

К счастью, в интернете есть два хороший сайта, на которых размещены множество сигнатур разных форматов. Целью стали самые распространенные форматы.

Как оказалось, некоторые сигнатуры подходят под разные форматы файлов, как, например, сигнатура файлов Microsoft Office. Исходя из этого, в некоторых случаях надо будет возвращать список подходящих расширений файла.

print(get("D:\\some_ms_office_document")) # выведет ['doc', 'ppt', 'xls']

Также нередко сигнатуры имеют смещение от начала файла, например, файлы мультимедийного контейнера 3GP.

1. Составление списка данных

В виде списка данных решено использовать JSON файл, с объектом ‘data’, значением которого будет массив объектов следующего вида:

{"format": "jpg", "offset": 0, "signature": ["FF D8 FF E0", "FF D8 FF E1", "FF D8 FF E2", "FF D8 FF E8"]}

Где:
format — формат файла;
offset — смещение сигнатуры от начала файла;
signature — массив подходящих сигнатур под указанный формат файла.

2. Написание утилиты

Импортируем необходимые модули:

import os
import json

Считываем список данных:

abspath = os.path.abspath(os.path.dirname(__file__))
data = json.loads(open(os.path.join(abspath, "data.json"), "r", encoding="utf-8").read())["data"]

Отлично, список данных загружен. Теперь мы считываем файл в виде байтов. Мы будем считывать лишь первые 32 байта, так как для определения распространенных форматов больше не требуется, а полное считывание большого файла будет занимать много времени.

file = open("path_to_the_file", "rb").read(32)

Если вывести переменную file, то мы увидим что-то похожее на это:

\x90\x00\x03\x00\x00\x00\x04

Теперь считанные байты надо перевести в шестнадцатеричную систему:

hex_bytes = " ".join(['{:02X}'.format(byte) for byte in file])

Далее мы создаем список, в который будут добавляться подходящие форматы:

out = []

А теперь самое интересное: создаем конструкцию, которая будет циклично определять формат файла, пока не пройдется по всем возможным форматам в списке данных:

for element in data:
        for signature in element["signature"]:
            offset = element["offset"]*2+element["offset"]
            if signature == hex_bytes[offset:len(signature)+offset].upper():
                out.append(element["format"])

Относительно данной строки:

offset = element["offset"]*2+element["offset"]

Поскольку наши байты представлены в виде строки, и за байт отвечает два символа, мы умножаем смещение на 2 и добавляем количество пробелов между «байтами».

И едиственное что нам осталось, это вывести список подходящих форматов, который представлен переменной out.

print(out) # выведет ['формат_1', 'формат_2'] или пустой массив, если совпадений не найдено

Заключение

Как оказалось, различные проектов сталкиваются с необходимостью распознавания формата файла, по этому я решил выпустить мое решение в open-source в виде модуля для Python’a под названием fleep (ссылка на страницу GitHub). Вы уже сейчас можете установить модуль с помощью стандартной python’овской утилиты pip:

pip install fleep

Также на GitHub странице проекта есть примеры использования и полный список поддерживаемых форматов файлов.

Спасибо за внимание!

создание, изменение, удалений файлов ~ PythonRu

Обработка файлов в Python с помощью модуля os включает создание, переименование, перемещение, удаление файлов и папок, а также получение списка всех файлов и каталогов и многое другое.

В индустрии программного обеспечения большинство программ тем или иным образом обрабатывают файлы: создают их, переименовывают, перемещают и так далее. Любой программист должен обладать таким навыком. С этим руководством вы научитесь использовать модуль os в Python для проведения операций над файлами и каталогами вне зависимости от используемой операционной системы.

Важно знать, что модуль os используется не только для работы с файлами. Он включает массу методов и инструментов для других операций: обработки переменных среды, управления системными процессами, а также аргументы командной строки и даже расширенные атрибуты файлов, которые есть только в Linux.

Модуль встроенный, поэтому для работы с ним не нужно ничего устанавливать.

Вывод текущей директории

Для получения текущего рабочего каталога используется os.getcwd():

import os


print("Текущая деректория:", os.getcwd())

os.getcwd() возвращает строку в Юникоде, представляющую текущий рабочий каталог. Вот пример вывода:

Текущая деректория: C:\python3\bin

Создание папки

Для создания папки/каталога в любой операционной системе нужна следующая команда:


os.mkdir("folder")

После ее выполнения в текущем рабочем каталоге тут же появится новая папка с названием «folder».

Подписывайтесь на телеграм каналы

Если запустить ее еще раз, будет вызвана ошибка FileExistsError, потому что такая папка уже есть. Для решения проблемы нужно запускать команду только в том случае, если каталога с таким же именем нет. Этого можно добиться следующим образом:



if not os.path.isdir("folder"):
     os.mkdir("folder")

Функция os.path.isdir() вернет True, если переданное имя ссылается на существующий каталог.

Изменение директории

Менять директории довольно просто. Проделаем это с только что созданным:


os.chdir("folder")

Еще раз выведем рабочий каталог:


print("Текущая директория изменилась на folder:", os.getcwd())

Вывод:

Текущая директория изменилась на folder: C:\python3\bin\folder

Создание вложенных папок

Предположим, вы хотите создать не только одну папку, но и несколько вложенных:


os.chdir("..")


os.makedirs("nested1/nested2/nested3")

Это создаст три папки рекурсивно, как показано на следующем изображении:

Создание файлов

Для создания файлов в Python модули не нужны. Можно использовать встроенную функцию open(). Она принимает название файла, который необходимо создать в качестве первого параметра и желаемый режим открытия — как второй:


text_file = open("text.txt", "w")

text_file.write("Это текстовый файл")

w значит write (запись), a — это appending (добавление данных к уже существующему файлу), а r — reading (чтение). Больше о режимах открытия можно почитать здесь.

Переименование файлов

С помощью модуля os достаточно просто переименовать файл. Поменяем название созданного в прошлом шаге.


os.rename("text.txt", "renamed-text.txt")

Функция os.rename() принимает 2 аргумента: имя файла или папки, которые нужно переименовать и новое имя.

Перемещение файлов

Функцию os.replace() можно использовать для перемещения файлов или каталогов:


os.replace("renamed-text.txt", "folder/renamed-text.txt")

Стоит обратить внимание, что это перезапишет путь, поэтому если в папке folder уже есть файл с таким же именем (renamed-text.txt), он будет перезаписан.

Список файлов и директорий


print("Все папки и файлы:", os.listdir())

Функция os.listdir() возвращает список, который содержит имена файлов в папке. Если в качестве аргумента не указывать ничего, вернется список файлов и папок текущего рабочего каталога:

Все папки и файлы: ['folder', 'handling-files', 'nested1', 'text.txt']

А что если нужно узнать состав и этих папок тоже? Для этого нужно использовать функцию os.walk():


for dirpath, dirnames, filenames in os.walk("."):
    
    for dirname in dirnames:
        print("Каталог:", os.path.join(dirpath, dirname))
    
    for filename in filenames:
        print("Файл:", os.path.join(dirpath, filename))

os.walk() — это генератор дерева каталогов. Он будет перебирать все переданные составляющие. Здесь в качестве аргумента передано значение «.», которое обозначает верхушку дерева:

Каталог: .\folder
Каталог: .\handling-files
Каталог: .\nested1
Файл: .\text.txt
Файл: .\handling-files\listing_files.py
Файл: .\handling-files\README.md
Каталог: .\nested1\nested2
Каталог: .\nested1\nested2\nested3

Метод os.path.join() был использован для объединения текущего пути с именем файла/папки.

Удаление файлов

Удалим созданный файл:


os.remove("folder/renamed-text.txt")

os.remove() удалит файл с указанным именем (не каталог).

Удаление директорий

С помощью функции os.rmdir() можно удалить указанную папку:


os.rmdir("folder")

Для удаления каталогов рекурсивно необходимо использовать os.removedirs():


os.removedirs("nested1/nested2/nested3")

Это удалит только пустые каталоги.

Получение информации о файлах

Для получения информации о файле в ОС используется функция os.stat(), которая выполняет системный вызов stat() по выбранному пути:

open("text.txt", "w").write("Это текстовый файл")


print(os.stat("text.txt"))

Вывод:

os.stat_result(st_mode=33206, st_ino=14355223812608232, st_dev=1558443184, st_nlink=1, st_uid=0, st_gid=0, st_size=19, st_atime=1575967618, st_mtime=1575967618, st_ctime=1575966941)

Это вернет кортеж с отдельными метриками. В их числе есть следующие:

    • st_size — размер файла в байтах
    • st_atime — время последнего доступа в секундах (временная метка)
    • st_mtime — время последнего изменения
    • st_ctime — в Windows это время создания файла, а в Linux — последнего изменения метаданных

Для получения конкретного атрибута нужно писать следующим образом:


print("Размер файла:", os.stat("text.txt").st_size)

Вывод:

Размер файла: 19

На этой странице больше об атрибутах.

Выводы

Работать с файлами и каталогами в Python очень просто. Не имеет значения даже используемая операционная система, хотя отдельные уникальные для системы функции можно использовать: например, os.chown() или os.chmod() в Linux. Более подробно эта тема освещена в официальной документации Python.

Как проверить версию Python в Windows / Linux / MacOS

Какую версию Python я установил?

Python — популярный язык программирования. Как и во многих других языках программирования, может быть несколько разных версий, упорядоченных по дате выпуска. Некоторым приложениям может потребоваться определенная версия Python.

Из этого руководства вы узнаете, как проверить версию Python в системах Windows, Linux или macOS.

Высокопроизводительных выделенных серверов Всего от 199 90 долларов.00 / мес

Доступ к командной строке / окно терминала :

  • Linux: Ctrl-Alt-T, Ctrl-Alt-F2
  • Windows: Win + R> введите powershell > Enter / OK
  • MacOS: Finder> Приложения> Утилиты> Терминал

Существуют разные версии Python, но две самые популярные — это Python 2.7.x и Python 3.7.x. x обозначает уровень редакции и может меняться по мере выхода новых версий.

Если смотреть на номер версии, обычно нужно читать три цифры:

  1. основной версия
  2. младший версия
  3. micro версия

Хотя основные выпуски не полностью совместимы, второстепенные выпуски обычно совместимы. Версия 3.6.1 должна быть совместима, например, с 3.7.1. Последняя цифра обозначает последние исправления и обновления.

Python 2.7 и 3.7 — разные приложения.Программное обеспечение, написанное в одной версии, часто не будет правильно работать в другой версии. При использовании Python важно знать, какая версия требуется приложению и какая у вас версия.

Python 2 перестанет публиковать обновления безопасности и исправления после 2020 года. Они продлили крайний срок из-за большого количества разработчиков, использующих Python 2.7. Python 3 включает утилиту от 2 до 3 , которая помогает переводить код Python 2 в Python 3.

Как проверить версию Python в Linux

Большинство современных дистрибутивов Linux поставляются с предустановленным Python.

Чтобы проверить установленную версию, откройте окно терминала и введите следующее:

  python –– версия  

Как проверить версию Python в Windows

В большинстве готовых установок Windows Python не предустановлен. Тем не менее, всегда полезно проверить.

Откройте Windows Powershell и введите следующее:

  python –– версия  

Если у вас установлен Python, он сообщит номер версии.

Или используйте функцию поиска Windows, чтобы узнать, какая у вас версия Python:

Нажмите клавишу Windows, чтобы начать поиск, затем введите Python. Система вернет любые совпадающие результаты. Скорее всего, совпадение покажет что-то подобное:

  Python 3.7 (32-разрядная версия)

приложение  

Или,

  Python 2.7 (32-разрядная версия)

приложение  

Определяет, какую основную и вспомогательную ревизии (3.x или 2.x) вы используете.

Серверы Outlet от 30,00 $ / мес

Как проверить версию Python в MacOS

Если вы используете MacOS, проверьте версию Python, введя следующую команду в терминале:

  python - версия  

Система сообщит версию.

Примечание : В некоторых случаях будет возвращен экран, полный информации. Если это произойдет, просто просканируйте расположение файлов на наличие слова python с номером после него.Этот номер и есть версия.

Проверка системы с помощью нескольких версий Python

Python2 и Python3 — разные программы. Многие программы обновляются со старой версии до новой. Однако установки Python 2.7.x можно запускать отдельно от версии Python 3.7.x в той же системе.

Python 3 не полностью обратно совместим.

Чтобы проверить Python 2.7.x :

  python –– версия  

Чтобы проверить версию программного обеспечения Python 3 :

  python3 –– версия  

Большинство систем различают Python 2 как python и Python 3 как python3 .Если у вас нет Python 2, ваша система может использовать команду python вместо python3 .

Примечание : Python не имеет встроенной системы обновления. Вам нужно будет скачать последнюю версию и установить ее.

Как проверить версию Python в сценарии

При написании приложения полезно, чтобы программное обеспечение проверяло версию Python перед его запуском, чтобы предотвратить сбои и несовместимость.

Используйте следующий фрагмент кода, чтобы проверить правильность версии Python:

  импортная система  
 , если не sys.version_info.major == 3 и sys.version_info.minor> = 6:

    print ("Требуется Python 3.6 или выше.")

    print ("Вы используете Python {}. {}.". формат (sys.version_info.major, sys.version_info.minor))

    sys.exit (1)  

Когда этот сценарий запускается, он проверяет, установлен ли в системе Python 3.6.Если нет, он отправит уведомление и отобразит текущую версию Python.

Теперь у вас должно быть четкое представление о том, как проверить версию Python, установленную в нескольких разных операционных системах. Python — мощный язык программирования, поэтому важно понимать его различные версии.

.

Как найти информацию о пути в Python

  1. Программирование
  2. Python
  3. Как найти информацию о пути в Python

Автор Джон Пол Мюллер

Чтобы использовать код в модуле, Python должен иметь возможность найдите модуль и загрузите его в память. Информация о местоположении хранится в виде путей в Python. Когда вы запрашиваете у Python импорт модуля, Python просматривает все файлы в своем списке путей, чтобы найти его. Информация о пути поступает из трех источников:

  • Переменные среды: Переменные среды Python, такие как PYTHONPATH, сообщают Python, где искать модули на диске.

  • Текущий каталог: Вы можете изменить текущий каталог Python, чтобы он мог найти любые модули, используемые вашим приложением.

  • Каталоги по умолчанию: Даже если вы не определяете какие-либо переменные среды, а текущий каталог не дает каких-либо используемых модулей, Python все равно может найти свои собственные библиотеки в наборе каталогов по умолчанию, которые включены как часть его собственного пути Информация.

Полезно знать информацию о текущем пути, потому что отсутствие пути может привести к сбою вашего приложения.Следующие шаги демонстрируют, как получить информацию о пути:

  1. Откройте оболочку Python.

    Вы видите, что появляется окно Python Shell.

  2. Введите import sys и нажмите Enter.

  3. Введите p в sys.path: и нажмите Enter.

    Python автоматически делает отступ для следующей строки. Атрибут sys.path всегда содержит список путей по умолчанию.

  4. Введите print (p) и дважды нажмите Enter.

    Вы видите список информации о пути. Ваш список может отличаться в зависимости от вашей платформы, установленной вами версии Python и установленных вами функций Python.

Атрибут sys.path надежен, но не всегда может содержать все пути, которые может видеть Python. Если вы не видите нужный путь, вы всегда можете проверить в другом месте, где Python ищет информацию. Следующие шаги показывают, как выполнить эту задачу:

  1. Введите import os и нажмите Enter.

  2. Введите os.environ [‘PYTHONPATH’]. Split (os.pathsep) и нажмите Enter.

    Когда у вас определена переменная среды PYTHONPATH, вы видите список путей. Однако, если у вас не определена переменная среды, вместо этого вы увидите сообщение об ошибке.

    Атрибут sys.path не включает функцию split (), поэтому в примере с ним используется цикл for. Однако атрибут os.environ [‘PYTHONPATH’] действительно включает функцию split (), поэтому вы можете использовать ее для создания списка отдельных путей.

    Вы должны предоставить split () значение, которое нужно искать при разбиении списка элементов. Константа os.pathsep (переменная с одним неизменяемым определенным значением) определяет разделитель путей для текущей платформы, чтобы вы могли использовать тот же код на любой платформе, поддерживающей Python.

  3. Закройте оболочку Python.

    Окно Python Shell закрывается.

Вы также можете добавлять и удалять элементы из sys.path.

Об авторе книги

Джон Пол Мюллер — внештатный автор и технический редактор, на его счету более 107 книг и 600 статей. Его предметы варьируются от сетей и искусственного интеллекта до управления базами данных и программирования без головы. Он также консультирует и пишет сертификационные экзамены. Посетите его веб-сайт http://www.johnmuellerbooks.com/.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *