Как удалить модуль в python
Перейти к содержимому

Как удалить модуль в python

  • автор:

Функция remove() модуля os в Python, удалить файл

Функция remove() модуля os удаляет путь path к файлу. Если путь является каталогом, возникает исключение IsADirectoryError . Используйте os.rmdir() для удаления каталогов.

Функция os.remove() семантически идентична os.unlink() .

Обе функции могут поддерживать пути относительно дескрипторов каталогов. Аргумент path может принимать объекты, представляющие путь файловой системы, такие как pathlib.PurePath .

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

Вызывает событие аудита os.remove с аргументами path , dir_fd .

Примеры использования:
import os f = 'test_delete.txt' # создадим файл with open(f, 'w') as fp: fp.write('data string') # удалим файл, если существует if os.path.isfile(f): os.remove(f) 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Управление переменной средой окружения системы
  • Представление пути в файловой системе
  • Извлечение/установка uid, gid и pid процесса
  • Наследование файловых дескрипторов
  • Создание дескриптора файла, чтение, запись и его закрытие
  • Функция listdir() модуля os
  • Функция walk() модуля os
  • Функция scandir() модуля os
  • Объект DirEntry() модуля os
  • Функция stat() модуля os
  • Объект stat_result, результаты выполнения os.stat()
  • Функция lstat() модуля os
  • Функция access() модуля os
  • Функция chdir() модуля os
  • Функция chmod() модуля os
  • Функция chown() модуля os
  • Функция chroot() модуля os
  • Функция getcwd() модуля os
  • Функция link() модуля os
  • Функция mkdir() модуля os
  • Функция makedirs() модуля os
  • Функция symlink() модуля os
  • Функция readlink() модуля os
  • Функция remove() модуля os, удалить файл
  • Функция removedirs() модуля os
  • Функция rename() модуля os
  • Функция renames() модуля os
  • Функция replace() модуля os
  • Функция rmdir() модуля os
  • Функция strerror() модуля os
  • Функция supports_dir_fd модуля os
  • Функция supports_effective_ids модуля os
  • Функция supports_fd модуля os
  • Функция supports_follow_symlinks модуля os
  • Функция truncate() модуля os
  • Функция utime() модуля os
  • Манипулирование списком контроля доступа ACL в Linux
  • Функция abort() модуля os
  • Функция exec*() модуля os
  • Функция popen() модуля os
  • Функция system() модуля os
  • Функция _exit() модуля os
  • Функция fork() модуля os
  • Функция kill() модуля os
  • Функции spawn*() модуля os
  • Функция umask() модуля os
  • Функция uname() модуля os
  • Функция wait() модуля os
  • Функция waitpid() модуля os
  • Определение состояния процесса
  • Константы для поддержки операций с путями
  • Генератор случайных байтов на основе модуля os
  • Функция startfile() модуля os
  • Функция times() модуля os
  • Функции getloadavg() и cpu_count() модуля os
  • Функция waitstatus_to_exitcode() модуля os
  • Функция listdrives() модуля os, имена дисков Windows
  • Функция listmounts() модуля os, точки монтирования Windows
  • Функция listvolumes() модуля os, список томов Windows

Самый простой способ удалить все пакеты Python установленные через pip

Речь про пакеты установленные через pip глобально. В моем случае под WIndows 10, но этот способ также будет работать и под Linux и должно работать под макосью.

pip freeze > 1.txt

pip uninstall — y — r 1.txt

Здесь pip freeze выводит список всех установленных пакетов. pip install удаляет заданный пакет, а с аргументом -r удаляет по списку. Аргумент -y избавляет от необходимости соглашаться ручками в консоли при удалении каждого из пакетов в списке.

Язык Python

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

Работа с операционной системой

Модуль sys

Модуль sys обеспечивает доступ к параметрам и функциям операционной системы.

Список sys.argv хранит имя запущенного скрипта и аргументы командной строки, переданные при его запуске:

# test.py import sys for idx, item in enumerate(sys.argv): print(f'Arg idx>: item:8> type(item)>') 
user@host:~$ python test.py arg1 arg2 345 Arg 0: test.py 'str'> Arg 1: arg1 'str'> Arg 2: arg2 'str'> Arg 3: 345 'str'>

Переменная sys.executable позволяет узнать какой именно интерпретатор python используется:

print(sys.executable) # /home/vitaly/miniconda3/envs/tf2/bin/python 

Функция sys.exit позволяет завершить выполнение программы. Эта функция принимает один аргумент — код выхода, который по умолчанию равен нулю. Большинство систем будет считать код 0 признаком успешного завершения программы, а любое другое число от 1 до 127 будет считать признаком ненормального завершения. Если передан объект другого типа, то он будет выведен в стандартный поток вывода, а код выхода будет равен 1. Функция sys.exit всегда генерирует исключение SystemExit, поэтому не стоит рассматривать ее как стандартный способ завершения программы. Используйте ее только в подходящих случаях, которые чаще всего связаны с невозможностью продолжения работы программы.

Переменная sys.path обеспечивает доступ к переменной окружения PYTHONPATH . Эта переменная содержит список путей, в которых выполняется поиск модулей. Если необходимый модуль расположен в директории, которая не входит в PYTHONPATH , то перед подключением этого модуля необходимо добавить эту директорию в переменную sys.path :

# 'path/to/my/facorite/module/dir/mymodule.py' sys.path.append('path/to/my/facorite/module/dir') import mymodule 

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

Модуль os

Модуль os предоставляет инструменты для работы с операционной системой и файловой системой.

Функции os.getenv и os.putenv позволяют получать и изменять значения переменных окружения. Функция os.system позволяет выполнять консольные команды, запуская при этом дочерний процесс. Рассмотрим следующий скрипт:

# test.py import os import sys print(f' HOME: os.getenv("HOME")>') os.putenv('NEWENV', 'value') print(f'NEWENV: os.getenv("NEWENV")>') if os.getenv('NEWENV') is not None: sys.exit(0) os.system('python test.py') 

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

HOME: /home/vitaly NEWENV: None HOME: /home/vitaly NEWENV: value

Разберемся с тем что произошло. Переменная окружения HOME содержит путь к домашней директории пользователя. Мы получили значение этой переменной с помощью os.genenv (в данном случае /home/vitaly ) и вывели его в консоль. Затем, c помощью sys.putenv , мы задали значение value новой переменной окружения NEWENV и сразу прочитали его. Функция os.getenv вернула None , поскольку функция sys.putenv оказывает влияние только на окружение дочерних процессов. Чтобы это проверить, мы снова запустили интерпретатор python с нашим скриптом test.py , используя os.system . В дочернем процессе снова были выведены переменные окружения HOME и NEWENV . В дочернем процессе переменная NEWENV определена, поэтому сработало условие для выхода из программы с помощью sys.exit(0) .

Функция os.listdir возвращает список названий объектов, лежащий в заданной директории.

Модуль os.path

Модуль os.path содержит полезные инструменты для работы с путями файловой системы. Функция os.path.exists проверяет указывает ли путь на существующий объект в файловой системе. Функция os.path.isfile имеет схожий смысл, но возвращает True только в том случае, если объект является обычным файлом (не директория и не ссылка):

os.path.exists('/home/vitaly') # True os.path.exists('/home/david') # False os.path.isfile('/home/vitaly') # False 

Функции os.path.join , os.path.split и os.path.splitext выполняют часто встречающиеся манипуляции со строками путей:

path = os.path.join('/home', 'vitaly', 'test.py') # /home/vitaly/test.py head, tail = os.path.split(path) # ['/home/vitaly', 'test.py'] root, ext = os.path.splitext(path) # ['/home/vitaly/test', '.py'] 
Модуль shutil

Модуль shutil предоставляет высокоуровневые инструменты для операций с файлами. Вот несколько примеров:

# копирование файла в директорию shutil.copy('filename', 'path/to/dir') # копирование файла в файл с другим именем shutil.copyfile('filename1', 'filename2') # рекурсивное копирование директории dir1 в директорию dir2 shutil.copytree('path/to/dir1', 'path/to/dir2') # рекурсивное удаление содержимого директории dir shutil.rmtree('path/to/dir') # рекурсивное перемещение файла или директории shutil.move(src, dst) 
Модуль glob

Модуль glob позволяет выполнять поиск объектов в файловой системе, имена которых удовлетворяют заданному паттерну:

# список текстовых файлов в текущей директории text_files = glob.glob('./*.txt') # рекурсивный поиск файлов с расширением .py, # начиная с текущей директории text_files_all = glob.glob('./**/*.py', recursive=True) 

Работа со строками

Модуль string

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

string.ascii_lowercase # 'abcdefghijklmnopqrstuvwxyz' string.ascii_uppercase # 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' string.ascii_letters # 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' string.digits # '0123456789' string.punctuation # !"#$%&'()*+,-./:;?@[\]^_`<|>~ 
Модуль re

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

Вычисления с произвольной точностью

Модуль decimal

Модуль decimal позволяет выполнять арифметические операции с плавающей точной с фиксированной точностью:

from decimal import * getcontext().prec = 6 Decimal(1) / Decimal(7) # Decimal('0.142857') getcontext().prec = 28 Decimal(1) / Decimal(7) # Decimal('0.1428571428571428571428571429') 

Объекты Decimal представлены в памяти точно. Это значит, что числа Decimal можно сравнивать с помощью операторов == и != , не опасаясь погрешности из-за округления двоичного представления (как это происходит в случае с типом float ).

В модуле decimal доступны некоторые математические функции:

getcontext().prec = 28 Decimal(2).sqrt() # Decimal('1.414213562373095048801688724') Decimal(1).exp() # Decimal('2.718281828459045235360287471') Decimal('10').ln() # Decimal('2.302585092994045684017991455') Decimal('10').log10() # Decimal('1') 
Модуль fractions

Тип Fraction из модуля fractions описывает рациональные числа — числа, которые можно представить в виде обыкновенной дроби:

from fractions import Fraction from math import pi, cos Fraction(16, -10) # Fraction(-8, 5) Fraction('3.1415926535897932').limit_denominator(1000) # Fraction(355, 113) Fraction(cos(pi/3)) # Fraction(4503599627370497, 9007199254740992) 

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

Продвинутые структуры данных и эффективное итерирование

Модуль queue

Модуль queue содержит реализацию нескольких структур данных, среди которых FIFO-очередь queue.Queue и очередь с приоритетом queue.PriorityQueue . Очередь с приоритетом возвращает не первый добавленный элемент, а наименьший:

from queue import Queue, PriorityQueue arr = [3, 6, 1, 9, 4, 7, 2, 5, 8, 1] q = Queue() for i in arr: q.put_nowait(i) while not q.empty(): print(q.get_nowait(), end=' ') # 3 6 1 9 4 7 2 5 8 1 pq = PriorityQueue() for i in arr: pq.put_nowait(i) while not pq.empty(): print(pq.get_nowait(), end=' ') # 1 1 2 3 4 5 6 7 8 9 

Типы модуля queue созданы для работы в многопоточной среде исполнения. С особенностями многопоточной работы, которые мы не будем обсуждать, связано использование методов get_nowait и put_nowait вместо get и put .

Модуль collections

Модуль collections расширяет набор стандартных контейнеров python. Рассмотрим три типа данных из этого модуля.

Функция namedtuple() позволяет создавать типы данных с именованными полями:

from collections import namedtuple Vector = namedtuple('Vector', ['x', 'y', 'z']) v1 = Vector(1., 0.5, 0.6) v1.x # 1. v1.y # 0.5 v1.z # 0.6 

Тип deque реализует контейнер двусторонняя очередь, или дек. Это последовательный контейнер, который позволяет эффективно добавлять и удалять элементы в начало и в конец:

from collections import deque deq = deque([1, 3, 5]) deq.append('a') # [1, 3, 5, 'a'] deq.appendleft(False) # [False, 1, 3, 5, 'a'] a = deq.pop() # a = 'a', deq = ['False', 1, 3, 5] b = deq.popleft() # b = False, deq = [1, 3, 5] 

Тип Counter является подклассом типа dict и позволяет удобно подсчитывать количество вхождений элементов в контейнере, например:

from collections import Counter the_longest_word_in_english\ = 'pneumonoultramicroscopicsilicovolcanoconiosis' cnt = Counter(the_longest_word_in_english) for key, val in cnt.items(): print(f'key>: val>', end=', ') # p: 2, n: 4, e: 1, u: 2, m: 2, o: 9, l: 3, t: 1, r: 2, a: 2, i: 6, c: 6, s: 4, v: 1 cnt.most_common(1) # [('o', 9)] 
Модуль itertools

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

import itertools arr = list(range(5)) # arr = [0, 1, 2, 3, 4] for item in itertools.accumulate(arr): print(item, end=' ') # 0 1 3 6 10 for perm in itertools.permutations(arr): print(''.join(map(str, perm)), end=' ') # 01234 01243 01324 01342 01423 01432 . for comb in itertools.combinations(arr, 3): print(''.join(map(str, comb)), end=' ') # 012 013 014 023 024 034 123 124 134 234 

Время и дата с модулем datetime

Модуль datetime позволяет полноценно работать с объектами даты и времени:

from datetime import date, timedelta d1 = date.fromisoformat('2019-12-04') d2 = date(2002, 12, 31) d1  d2 # False delta = d1 - d2 delta.days # 6182 type(delta) # delta2 = timedelta(days=15) d3 = d1 + delta2 # 2019-12-19 d3.weekday() # 3 (Среда) d4 = date.today() # 2020-07-15 
import time from datetime import datetime dt1 = datetime.fromtimestamp(time.time()) # 2020-07-15 21:47:09.036145 dt2 = datetime.fromisoformat('2020-07-15 21:47:09.036145') dt2.timestamp() # 1594824429.036145 (секунд прошло с 1970-01-01) 

Резюме

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

Источники

  • docs.python.org/3/library/
  • PEP 206. Batteries Included Philosophy
  • Введение
  • Настройка рабочей среды
  • Язык C++
  • Язык Python
    • Основы синтаксиса языка python
    • Строки
    • Стандартные модули python, часть I
    • ООП в python
    • Стандартные модули II
    • Итераторы и генераторы
    • Вычисления с библиотекой numpy
    • Визуализация данных с matplotlib

    Как удалить модуль в python

    Модули в Питоне.

    Работая в интерактивном режиме интерпретатора, вы, наверное, решили, что писать большие программы в Питоне невозможно, так как после выхода из интерпретатора определения ваших функций “исчезают” бесследно. А хотелось бы иметь возможность написать несколько функций в одном файле и потом иметь возможность обращаться к ним из других программ(принцип повторного использования кода). Такая возможность в Питоне существует. Это технология модулей, то есть текстовых файлов, содержащих в себе какой-либо набор функций(желательно объединённых по какому-либо признаку). Большинство функций стандартной библиотеки Питона реализовано именно в модулях. Создать модуль очень просто: просто зайдите в свой любимый текстовый редактор, напишите определения своих функций с помощью ключевого слова def, не забывайте также об отступах, которые выделяют блоки в программе. Ставить символы >>> и . в текстовом редакторе нельзя, так как это вызовет синтаксическую ошибку. Модули Питона имеют расширение .py и могут содержать только текст. Внутри модуля существует глобальная переменная __name__, в которой содержится имя текущего модуля. Напрмер, создайте файл с именем fibo.py, содержащим следующий код:

    def fib(n): # выводит числа Фибоначчи на экран

    def fib2(n): # возвращает числа Фибоначчи, не превосходящие n

    Сохраните файл и зайдите в интерпретатор Питона. К функциям из модуля можно получить доступ посредством ключевого слова import имя_модуля:

    Теперь вы можете вызывать любые функции импортированного модуля в форме “имя_модуля.имя_функции”, то есть обращаться к функциям и переменным модуля не непосредственно, а через имя содержащего их модуля:

    1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

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

    1 1 2 3 5 8 13 21 34 55 89 144 233 377

    Дополнительная информация о модулях.

    Модули могут содержать в себе кроме определений функций и некоторый исполняемый код. Этот код не входит ни в какую функцию и исполняется интерпретатором, когда данный модуль подключается ключевым словом import. В исполняемом коде модуля можно использовать любые переменные, которые внутри модуля объявляются глобальными. Но каждый модуль имеет собственную таблицу переменных, так что случайное изменение таких переменных вне модуля исключено. Такой механизм обеспечивает стабильность работы модуля и соответствует принципу сокрытия информации.

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

    Из модуля можно импортировать не все, а только необходимые в данной ситуации функции(или иные объекты), тогда оператор import будет выглядеть так:

    >>> from fibo import fib, fib2

    1 1 2 3 5 8 13 21 34 55 89 144 233 377

    При этом стоит отметить, что к другим функциям модуля обратиться будет невозможно, так ка модуль fibo будет неопределён. Для импортирования из модуля всех функций, кроме тех, имена которых начинаются на _, можно использовать import следующим образом:

    >>> from fibo import *

    1 1 2 3 5 8 13 21 34 55 89 144 233 377

    Информация о поиске модулей.

    Когда вы импортируете модуль, то Питон ищет файл с таким именем не где-нибудь, а в определённых каталогах. Эти каталоги определены в переменной окружения PYTHONPATH вашей операционной системы. Эта переменная имеет структуру, схожую с переменной PATH и так же содержит в себе каталоги, где Питон будет искать модули. При отсутствии этой переменной, Питон будет искать модули в папке, куда были установлены его исполняемые файлы, а так как этот каталог зависит от инсталляции и частенько никаких модулей в нём нет, то удалять или изменять без особой необходимости PYTHONPATH не следует. Доступ к списку каталогов поиска можно получить также из списка sys.path модуля sys(import sys). Этот список можно изменять программно, путём стандартных операций со списками. Ни в коем случае не называйте свои модули так же, как названы стандартные модули Питона, так как это повлечёт за собой труднообнаружимую ошибку. Если подлежащий импорту скрипт находится в том же каталоге, что и вызывающая его программа, то нет необходимости обращаться к sys.path, так как Питон ищет модули также и в текущей директории.

    Компиляция скриптов на Питоне.

    Питон является интерпретируемым языком, то есть интерпретатор считывает из текста некие операторы и сразу же их выполняет, при этом осуществляется контроль за синтаксисом языка. Есть способ ускорить загрузку скриптов на Питоне, это особенно важно для часто используемых модулей. Для этого существуют компилированные модули(своеобразный аналог байт-кода языка Java). Если в каталоге существуют два файла с одним именем файла: один с расширением .py, а другой — .pyc(компилированный), то компилированный файл будет использоваться только в том случае, когда источником для его компиляции являлся файл .py(одинаковая версия модуля). При исполнении какого-либо модуля, файл .pyc генерируется автоматически, так что об этом вам не приходится заботиться.

    Стандартные модули Питона.

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

    В модулях содержатся некоторые функции, позволяющие настраивать интерпретатор. Это в основном функции и переменные модуля sys. Например, переменные sys.ps1 и sys.ps2 хранят в себе приглашение интерпретатора:

    Список sys.path хранит в себе пути поиска библиотек интерпретатором:

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

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