Примеры модуль: Решение уравнений с модулями

Содержание

Модуль Math — Примеры математических программ в Python

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

Содержание статьи

  • Специальные константы библиотеки math
  • Число Пи из библиотеки math
  • Число Эйлера из библиотеки math
  • Экспонента и логарифм библиотеки math
  • Функция экспоненты exp() в Python
  • Функция логарифма log() в Python
  • Функция log10() в Python
  • Функция log2() в Python
  • Функция log(x, y) в Python
  • Функция log1p(x) в Python
  • Арифметические функции в Python
  • Тригонометрические функции в Python
  • Конвертация типов числа в Python

Специальные константы библиотеки math

В библиотеке Math в Python есть две важные математические константы.

Число Пи из библиотеки math

Первой важной математической константой является число Пи (π). Оно обозначает отношение длины окружности к диаметру, его значение 3,141592653589793. Чтобы получить к нему доступ, сначала импортируем библиотеку math следующим образом:

Python

import math

import math

Затем можно получить доступ к константе, вызывая pi:

Python

math.pi

math.pi

Вывод

3.141592653589793

3.141592653589793

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

Python

import math radius = 2 print(‘Площадь окружности с радиусом 2 равна:’, math.

pi * (radius ** 2))

import math

 

radius = 2

print(‘Площадь окружности с радиусом 2 равна:’, math.pi * (radius ** 2))

Вывод

Площадь окружности с радиусом 2 равна: 12.566370614359172

Площадь окружности с радиусом 2 равна: 12.566370614359172

Мы возвели радиус во вторую степень и умножили значение на число Пи, как и следовало сделать в соответствии с формулой πr2.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Python Форум Помощи

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Подписаться

Число Эйлера из библиотеки math

Число Эйлера (е) является основанием натурального логарифма. Оно также является частью библиотеки Math в Python. Получить доступ к числу можно следующим образом:

Python

math.e

math.e

Вывод

2.718281828459045

2.718281828459045

В следующем примере представлено, как можно использовать вышеуказанную константу:

Python

import math print((math.e + 6 / 2) * 4.32)

import math

 

print((math.e + 6 / 2) * 4.32)

Вывод

24.702977498943074

24.702977498943074

Экспонента и логарифм библиотеки math

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

Функция экспоненты exp() в Python

Библиотека Math в Python поставляется с функцией exp(), которую можно использовать для вычисления значения е. К примеру, ex — экспонента от х. Значение е равно 2.718281828459045.

Метод может быть использован со следующим синтаксисом:

Python

math.exp(x)

math.exp(x)

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

Python

import math # Инициализация значений an_int = 6 a_neg_int = -8 a_float = 2.00 # Передача значений методу exp() и вывод print(math.exp(an_int)) print(math.exp(a_neg_int)) print(math.exp(a_float))

1

2

3

4

5

6

7

8

9

10

11

import math

 

# Инициализация значений

an_int = 6

a_neg_int = -8

a_float = 2. 00

 

# Передача значений методу exp() и вывод

print(math.exp(an_int))

print(math.exp(a_neg_int))

print(math.exp(a_float))

Вывод

403.4287934927351 0.00033546262790251185 7.38905609893065

403.4287934927351

0.00033546262790251185

7.38905609893065

Мы объявили три переменные и присвоили им значения с различными числовыми типами данных. Мы передали значения методу

exp() для вычисления их экспоненты.

Мы также можем применить данный метод для встроенных констант, что продемонстрировано ниже:

Python

import math print(math.exp(math.e)) print(math.exp(math.pi))

import math

 

print(math.exp(math.e))

print(math.exp(math.pi))

Вывод

15.154262241479262 23.140692632779267

15. 154262241479262

23.140692632779267

При передаче не числового значения методу будет сгенерирована ошибка TypeError, как показано далее:

Python

import math print(math.exp(«20»))

import math

 

print(math.exp(«20»))

Вывод

Traceback (most recent call last): File «C:/Users/admin/mathe.py», line 3, in <module> print (math.exp(«20»)) TypeError: a float is required

Traceback (most recent call last):

  File «C:/Users/admin/mathe.py», line 3, in <module>

    print (math.exp(«20»))

TypeError: a float is required

Как видно из примера выше, генерируется ошибка TypeError.

Функция логарифма log() в Python

Функция log() возвращает логарифм определенного числа. Натуральный логарифм вычисляется относительно основания е. В следующем примере показано использование функции логарифма:

Python

import math print(«math.log(10.43):», math.log(10.43)) print(«math.log(20):», math.log(20)) print(«math.log(math.pi):», math.log(math.pi))

import math

 

print(«math.log(10.43):», math.log(10.43))

print(«math.log(20):», math.log(20))

print(«math.log(math.pi):», math.log(math.pi))

В скрипте выше методу передаются числовые значения с различными типами данных. Также рассчитывается натуральный логарифм константы pi. Вывод следующий:

math.log(10.43): 2.344686269012681 math.log(20): 2.995732273553991 math.log(math.pi): 1.1447298858494002

math.log(10.43): 2.344686269012681

math.log(20): 2.995732273553991

math.log(math.pi): 1.1447298858494002

Функция log10() в Python

Метод log10() возвращает логарифм по основанию 10 определенного числа. К примеру:

Python

import math # Возвращает log10 числа 50 print(«log10 числа 50 равен:», math.log10(50))

import math

 

# Возвращает log10 числа 50

print(«log10 числа 50 равен:», math.log10(50))

Вывод

log10 числа 50 равен: 1.6989700043360187

log10 числа 50 равен: 1.6989700043360187

Функция log2() в Python

Функция log2() возвращает логарифм определенного числа по основанию 2. К примеру:

Python

import math # Возвращает log2 числа 16 print(«log2 числа 16 равен:», math.log2(16))

import math

 

# Возвращает log2 числа 16

print(«log2 числа 16 равен:», math.log2(16))

Вывод

log2 числа 16 равен: 4.0

log2 числа 16 равен: 4.

0

Функция log(x, y) в Python

Функция log(x, y) возвращает логарифм числа х по основанию y. К примеру:

Python

import math # Возвращает логарифм 3,4 print(«Логарифм 3 по основанию 4 равен:», math.log(3, 4))

import math

 

# Возвращает логарифм 3,4

print(«Логарифм 3 по основанию 4 равен:», math.log(3, 4))

Вывод

Логарифм 3 по основанию 4 равен: 0.6309297535714574

Логарифм 3 по основанию 4 равен: 0.6309297535714574

Функция log1p(x) в Python

Функция log1p(x) рассчитывает логарифм(1+x), как представлено ниже:

Python

import math print(«Значение логарифма(1+x) от 10 равно:», math.log1p(10))

import math

 

print(«Значение логарифма(1+x) от 10 равно:», math. x (при использовании функции expml()) равно: 0.00010000500016667084

К числу других математических функций относятся:

  • pow(): принимает два вещественных аргумента, возводит первый аргумент в степень, значением которой является второй аргумент, после чего возвращает результат. К примеру, pow(2, 2) эквивалентно выражению 2 ** 2;
  • sqrt(): возвращает квадратный корень определенного числа.

Примеры данных методов представлены ниже:

Возведение в степень

Python

math.pow(3, 4)

math.pow(3, 4)

Вывод

Квадратный корень

Python

math.sqrt(81)

math.sqrt(81)

Вывод

Тригонометрические функции в Python

Модуль math в Python поддерживает все тригонометрические функции. Самые популярные представлены ниже:

  • sin(a): Возвращает синус "а" в радианах;
  • cos(a): Возвращает косинус "а" в радианах;
  • tan(a): Возвращает тангенс "а" в радианах;
  • asin(a): Возвращает инвертированный синус. Аналогичным образом работают "atan" и "acos";
  • degrees(a): Конвертирует угол "a" из радиан в градусы;
  • radians(a): Конвертирует угол "a" из градусов в радианы.

Рассмотрим следующий пример:

Python

import math angle_In_Degrees = 62 angle_In_Radians = math.radians(angle_In_Degrees) print(‘Значение угла:’, angle_In_Radians) print(‘sin(x) равен:’, math.sin(angle_In_Radians)) print(‘tan(x) равен:’, math.tan(angle_In_Radians)) print(‘cos(x) равен:’, math.cos(angle_In_Radians))

1

2

3

4

5

6

7

8

9

import math

 

angle_In_Degrees = 62

angle_In_Radians = math. radians(angle_In_Degrees)

 

print(‘Значение угла:’, angle_In_Radians)

print(‘sin(x) равен:’, math.sin(angle_In_Radians))

print(‘tan(x) равен:’, math.tan(angle_In_Radians))

print(‘cos(x) равен:’, math.cos(angle_In_Radians))

Вывод

Значение угла: 1.0821041362364843 sin(x) равен: 0.8829475928589269 tan(x) равен: 1.8807264653463318 cos(x) равен: 0.46947156278589086

Значение угла: 1.0821041362364843

sin(x) равен: 0.8829475928589269

tan(x) равен: 1.8807264653463318

cos(x) равен: 0.46947156278589086

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

Конвертация типов числа в Python

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

Python

3 + 5.1

3 + 5.1

Вывод

В вышеприведенном примере целое число 3 было преобразовано в вещественное число 3.0 с плавающей точкой. Результатом сложения также является число с плавающей точкой (или запятой).

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

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

Python

a = 12 b = float(a) print(b)

a = 12

b = float(a)

print(b)

Вывод

Целое число типа integer было преобразовано в вещественное число типа float. float также можно конвертировать в integer следующим образом:

Python

a = 12.65 b = int(a) print(b)

a = 12.65

b = int(a)

print(b)

Вывод

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

Заключение

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

Vasile Buldumac

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: [email protected]

Образование
Universitatea Tehnică a Moldovei (utm.md)

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»

Примеры расчетов пользователей

Новости

Публикации

Вебинары

Вебинар: Способы соединения конечных элементов и узлов в ЛИРА 10

Приглашаем на вебинар по применению инструментов соединения элементов и узлов в ЛИРА 10. Будут рассмотрены примеры из инженерной практики: моделирование шарниров, учет несоосности, передача усилий между различными типами КЭ, автоматическое соединение элементов

03 октября 2022

Базовый курс ЛИРА 10 во Владивостоке 17-21 октября

Приглашаем на первый курс ЛИРА 10 на Дальнем Востоке

05 сентября 2022

Запись докладов по сейсмостойкому строительству

Делимся материалами с III Международной научнопрактической конференции по сейсмостойкому строительству в г. Бишкек

10 августа 2022

Список Eurocodes, реализованных в ЛИРА 10

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

02 августа 2022

Все новости

Реализация модели контактного слоя при расчете адгезионного соединения с использованием метода конечных элементов

В большинстве опытов по испытанию адгезионных соединений измеряется средняя адгезионная прочность. Данная величина вычисляется как отношение разрушающей нагрузки к площади склейки. Подобный подход подразумевает равномерное распределение касательных напряжений. Исследователи давно обнаружили, что средняя адгезионная прочность соединения является сильной функцией геометрических [1] и физико-механических параметров модели и, следовательно, делает малоинформативными и несопоставимыми экспериментальные данные, выполненные на отличающихся образцах. Малочисленные результаты по измерению касательных напряжений по площади склейки с использованием преимущественно поляризационно-оптических методов [2] показывают, что распределение напряжений является нелинейной функцией. При этом наблюдается концентрация напряжений у торцов модели. В связи с этими фактами возникает необходимость детального изучения напряженно-деформированного состояния адгезионных соединений.

06 июня 2019

Оценка точности нелинейного статического метода анализа сейсмостойкости сооружений

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

06 февраля 2018

Напряженно-деформированное состояние коррозионно — поврежденных железобетонных элементов при динамическом нагружении

С помощью современного программно-вычислительного комплекса  ЛИРА 10.6 выполнена сравнительная оценка напряженно–деформированного состояния  не поврежденного и коррозионно-поврежденного железобетонного элемента при динамическом и статическом нагружении. Проанализировано   влияния ослабленного коррозией бетонного участка сжатой зоны на перераспределение напряжений в сечении.

25 января 2018

Применение технологий BIM при расчете зданий в условиях сложной геотехнической обстановки в связке программ Revit, ЛИРА 10. 6 и PLAXIS 3D

В статье рассматривается методика совместной работы ПК ЛИРА 10.6 и PLAXIS 3D посредством API модуля. С позиции инженера-расчетчика рассматриваются возможности передачи моделей между различными программами с применением технологий информационного моделирования.

21 июня 2017

Все публикации

Способы соединения конечных элементов и узлов в ЛИРА 10

Приглашаем на вебинар по применению инструментов соединения элементов и узлов в ЛИРА 10. Будут рассмотрены примеры из инженерной практики: моделирование шарниров, учет несоосности, передача усилий между различными типами КЭ, автоматическое соединение элементов

30 сентября 2022

Нововведения связки Autodesk Revit – ЛИРА 10.12

В версии 10.12 связка стала еще удобнее для работы проектировщиков

20 мая 2022

Расчет стальных конструкций на сейсмические воздействия

Рассмотрим особенности расчета и теоретические аспекты, объясняющие те или иные пункты в нормах проектирования.

20 мая 2022

Расчёт деревянных конструкций в ЛИРА 10

Автоматический расчёт и точные результаты

26 ноября 2021

Все записи вебинаров

Модули и пакеты. Урок 12 курса «ООП на Python»

Что такое модули, как их импортировать в программу, а также как создавать собственные модули, было описано в одном из уроков курса «Python. Введение в программирование». Там модули рассматривались с точки зрения обособления функций, которые потом можно было бы импортировать в разные программы. На самом деле модули содержат не столько функции, сколько классы с их методами.

В этом уроке шагнем дальше и рассмотрим, как несколько модулей-файлов могут быть объединены в пакет. Также выясним, что модули могут исполняться как самостоятельные программы.

Пакеты модулей

В программировании связанные модули принято объединять в пакеты. Пакет представляет собой каталог с файлами-модулями. Кроме того, внутри пакета могут быть вложенные каталоги, а уже в них – файлы.

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

Каталог-пакет назовем geometry. Один модуль – planimetry.py, другой – stereometry.py. Пакет следует разместить в одном из каталогов, содержащихся в списке sys.path. Первым его элементом является домашний каталог, обозначаемый как пустая строка. Таким образом, пакет проще разместить в том же каталоге, где будет основной скрипт.

Если не планируется писать скрипт, а достаточно протестировать пакет в интерактивном режиме, то в Linux будет проще разместить его в домашнем каталоге.

Содержимое файла planimetry.py:

from math import pi, pow
 
 
class Rectangle:
    def __init__(self, a, b):
        self.w = a
        self.h = b
 
    def square(self):
        return round(self. w * self.h, 2)
 
    def perimeter(self):
        return 2 * (self.w + self.h)
 
 
class Circle:
    def __init__(self, radius):
        self.r = radius
 
    def square(self):
        return round(pi * pow(self.r, 2), 2)
 
    def length(self):
        return round(2 * pi * self.r)

Код файла stereometry.py:

from math import pi, pow
 
 
class Cuboid:
    def __init__(self, a, b, c):
        self.length = a
        self.width = b
        self.height = c
        self.__sq_sur = 2 * (a * b + a * c + b * c)
        self.__volume = a * b * c
 
    def S(self):
        return round(self.__sq_sur, 2)
 
    def V(self):
        return round(self.__volume, 2)
 
 
class Ball:
    def __init__(self, radius):
        self.r = radius
 
    def S(self):
        s = 4 * pi * pow(self.r, 2)
        return round(s, 2)
 
    def V(self):
        v = (4 / 3) * pi * pow(self.r, 3)
        return round(v, 2)

Также в каталоге пакета должен быть файл __init__.py, даже если этот файл будет пустым. Его наличие позволяет интерпретатору понять, что перед ним пакет, а не просто каталог. Файл __init__.py может быть не пустым, а содержать переменную, в которой перечислены модули, которые будут импортироваться командой from имя_пакета import *, а также какой-либо инициирующий код, например, подключение к базе данных.

Теперь попробуем импортировать модули пакета:

>>> import geometry.planimetry as pl
>>> import geometry.stereometry as st
>>> a = pl.Rectangle(3, 4)
>>> b = st.Ball(5)
>>> a.square()
12
>>> b.V()
523.6

Если сделать импорт только пакета, то мы не сможем обращаться к модулям:

pl@pl-desk:~$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" 
or "license" for more information.
>>> import geometry
>>> b = geometry.stereometry.Ball(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'geometry' 
has no attribute 'stereometry'

Тогда возникает вопрос: в чем выгода пакетов, если все равно приходится импортировать модули индивидуально? Основной смысл заключается в структурировании пространств имен. Представьте, что есть разные пакеты, содержащие одноименные модули и классы. В таком случае точечная нотация через имя пакета, подпакета, модуля дает возможность пользоваться в программе одноименными сущностями из разных пакетов. Например, a.samename и b.samename. Кроме того точечная нотация дает своего рода описание объекту. Например, выражения geometry.planimetry.House() или geometry.stereometry.House() говорят, что в первом случае будет создан двумерный объект-дом, во-втором – трехмерный. Это куда информативней, чем просто House().

Однако в файле __init__.py в переменной __all__ можно перечислить, какие модули будут импортироваться через from имя_пакета import *:

__all__ = ['planimetry', 'stereometry']

После этого можно делать так:

>>> from geometry import *
>>> b = stereometry.Ball(5)
>>> a = planimetry.Circle(5)

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

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

Однако возможности языка позволяют в модули помещать код, который будет выполняться, когда файл не импортируется, а сам передается интерпретатору как самостоятельная программа. Выглядит это примерно так:

class A:
    def __str__(self):
        return "A"
 
if __name__ == "__main__":
    print(A())

То, что находится в теле if, выполнится только в случае исполнения файла как скрипта. Но не при импорте.

pl@pl-desk:~$ python3 test.py
A

Встроенный атрибут __name__, представляющий собой переменную, есть у каждого файла. При импорте этой переменной присваивается имя модуля:

>>> import math
>>> math.__name__
'math'
>>> planimetry.__name__
'geometry. planimetry'

Однако когда файл исполняется как скрипт, значение __name__ становится равным строке «__main__». Это можно увидеть, если в код поместить print(__name__) и выполнить файл как скрипт.

Таким образом, если __name__ равен «__main__», то выполняется код, вложенный в тело условного оператора. Обычно сюда помещают код для тестирования модуля в процессе разработки, а в готовый модуль – примеры, как пользоваться определенными здесь сущностями.

Практическая работа

В практической работе урока 7 «Композиция» требовалось разработать интерфейс взаимодействия с пользователем. Разнесите сам класс и интерфейс по разным файлам. Какой из них выполняет роль модуля, а какой – скрипта? Оба файла можно поместить в один каталог.

Курс с примерами решений практических работ:
android-приложение, pdf-версия

Примеры модулей для Wowza Streaming Engine

Добавьте звуковую дорожку в поток только для видео с помощью модуля Java Wowza Streaming Engine

Используя модуль AddAudioTrack, добавьте звуковую дорожку в прямую трансляцию в Wowza Streaming Engine, прежде чем отправлять ее в Akamai.

Проверка подключений к серверу Akamai с авторизацией Akamai G2O с использованием прослушивателя VHost Wowza Streaming Engine

С помощью прослушивателя vhost AkamaiValidate проверьте процесс запроса и подключения потоков на основе HTTP из исходных HTTP-приложений в Wowza Streaming Engine.

Отправка статистики подключений и потоков в Google Analytics с помощью Java-модуля Wowza Streaming Engine

Настройте модуль Wowza Streaming Engine ModuleAnalytics для отправки данных о подключениях приложений и потоках в Google Analytics.

Микшируйте аудио и видео из разных источников в прямом эфире с помощью Java-модуля Wowza Streaming Engine

Объедините отдельные аудио- и видеоисточники в один поток с помощью ModuleAVMix для Wowza Streaming Engine.

Занесите поток в сеансе в черный список с помощью прослушивателя сервера Wowza Streaming Engine и поставщика HTTP

Используйте прослушиватель сервера BlacklistStreams и поставщика HTTP, чтобы заблокировать поток в сеансе и постоянно заносить его в черный список после перезапуска сервера.

Фильтрация воспроизведений только для аудио в автоматически сгенерированном многобитовом плейлисте Apple HLS с помощью Java-модуля Wowza Streaming Engine

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

Дублируйте потоки в другой экземпляр приложения с помощью Java-модуля Wowza Streaming Engine

Используйте модуль DuplicateStreams для копирования потоков из одного экземпляра приложения в другой на том же сервере Wowza Streaming Engine.

Управляйте потоками, записываемыми устройством записи nDVR, с помощью Java-модуля Wowza Streaming Engine

Используйте модуль DvrRecorderControl, чтобы определить, какие потоки записываются устройством записи nDVR Wowza Streaming Engine.

Динамическое управление потоками класса Stream с помощью Java-модуля Wowza Streaming Engine

Используйте модуль HTTPStreamControl для Wowza Streaming Engine для управления потоками класса Stream и списками воспроизведения с помощью HTTP-запросов.

Мониторинг пропускной способности опубликованных потоков с помощью Java-модуля Wowza Streaming Engine

Используйте модуль LimitPublishedStreamBandwidth для Wowza Streaming Engine для автоматического отключения потоков, превышающих установленный предел пропускной способности.

Ограничьте количество зрителей потока с помощью Java-модуля Wowza Streaming Engine

Установите максимальное количество зрителей на поток на уровне приложения или потока с помощью модуля LimitStreamViewer в Wowza Streaming Engine.

 Автоматическая запись потоков с помощью Java-модуля Wowza Streaming Engine

Используйте модуль LiveStreamRecordAutoRecord для автоматической записи входящих потоков в приложении Wowza Streaming Engine с использованием параметров StreamRecorder по умолчанию для приложения.

Загрузите и заблокируйте приложение с прослушивателем сервера Wowza Streaming Engine

Используйте прослушиватель сервера LoadAndLockAppInstances при запуске Wowza Streaming Engine, если вам нужно, чтобы приложение загружалось и оставалось загруженным, пока сервер не будет остановлен.

Зацикливать преролл до начала прямой трансляции с помощью Java-модуля Wowza Streaming Engine

Используйте Java-модуль LoopUntilLive Wowza Streaming Engine для настройки воспроизведения видео перед началом прямой трансляции и после ее окончания.

Получите локальный доступ к содержимому, прежде чем обращаться к удаленному источнику с помощью Java-модуля Wowza Streaming Engine

Используйте Java-модуль MediaCacheLocalContent Wowza Streaming Engine, чтобы сделать локально сохраненный контент доступным до его передачи в удаленный источник Media Cache.

Храните файлы SMIL и ресурсы VOD в разных местах с помощью Java-модуля Wowza Streaming Engine

Используйте Java-модуль MediaListPathSelector Wowza Streaming Engine для хранения файлов SMIL и связанных ресурсов VOD в разных каталогах содержимого.

Выберите несколько дорожек из файла VOD с помощью модуля Java Wowza Streaming Engine

Используйте модуль MultiTrackVOD, чтобы выбрать, какие дорожки будут отправлены игрокам в файле VOD с несколькими дорожками видео, аудио или данных в Wowza Streaming Engine.

Управляйте тем, какие потоки пакетируются для потоковой передачи HTTP, с помощью Java-модуля Wowza Streaming Engine

Используйте модуль PacketizerControl, чтобы контролировать, какие потоки пакетируются для потоковой передачи HTTP с помощью Wowza Streaming Engine.

Управляйте доступом к вашему приложению, проверяя реферальный домен с помощью Java-модуля Wowza Streaming Engine

. Используйте модуль RefererValidate для управления доступом к вашим потокам без RTMP-плеера на основе реферального домена.

Загружайте записанные медиафайлы в корзину Amazon S3 с помощью Java-модуля Wowza Streaming Engine

Используйте Java-модуль S3Upload Wowza Streaming Engine для загрузки записанных медиафайлов в корзину Amazon S3.

Расписание потоковой передачи с помощью Java-модуля Wowza Streaming Engine

Используйте модуль StreamPublisher для планирования потоков и списков воспроизведения для Wowza Streaming Engine.

Динамически разрешайте потоковые запросы пограничного сервера к исходным серверам с помощью Java-модуля Wowza Streaming Engine

. Разрешайте пограничные запросы к нескольким исходным серверам с помощью модуля StreamResolver для Wowza Streaming Engine.

Отключение подключенных клиентов по истечении заданного периода времени с помощью Java-модуля Wowza Streaming Engine

Используйте модуль TimedDisconnect для отключения игроков от приложений Wowza Streaming Engine по истечении заданного времени.

Управляйте транскодированием потоков с помощью Java-модуля Wowza Streaming Engine

Управляйте транскодированием потоков в приложении с помощью модуля TranscoderControl в Wowza Streaming Engine.

Создание моментальных снимков перекодированного потока с помощью Java-модуля Wowza Streaming Engine

Используйте Java-модуль TranscoderTimedSnapshot Wowza Streaming Engine для создания снимков перекодированного потока через равные промежутки времени.

Перемещение записей прямых трансляций с помощью Java-модуля Wowza Streaming Engine

Используйте Java-модуль MediaWriterFileMover Wowza Streaming Engine для копирования или перемещения файлов после их записи на диск.

Безопасная публикация из RTMP-кодировщика, который не поддерживает аутентификацию с помощью Java-модуля Wowza Streaming Engine

Публикация из RTMP-кодировщика, который не поддерживает аутентификацию по имени пользователя и паролю с использованием Java-модуля SecureURLParams Wowza Streaming Engine.

Интеграция аутентификации пользователей Wowza Streaming Engine с внешними системами с использованием Java-модуля Wowza Streaming Engine

Используйте модуль ModuleCoreSecurity для перехвата запросов имени пользователя и пароля для использования базы данных вместо файла паролей для аутентификации кодировщиков с помощью Wowza Streaming Engine.

Включите географическую блокировку с помощью прослушивателя сервера Wowza Streaming Engine и модуля Java

Используйте надстройку GeoIP и ее модуль ModuleGeoIP, чтобы включить географическую блокировку для подключений RTMP, HTTP и RTSP к Wowza Streaming Engine с IP-адресов в указанных странах.

Получите статистику производительности HTTP и RTP с помощью Java-модуля Wowza Streaming Engine

Соберите статистику производительности для потоков с помощью этого модуля Java API Wowza Streaming Engine.

Модули Python

Любой текстовый файл с расширением .py , содержащий код Python, по сути является модулем. Различные объекты Python, такие как функции, классы, переменные, константы и т. д., определенные в одном модуле, можно сделать доступными для сеанса интерпретатора или другого сценария Python с помощью импорт выписка. Функции, определенные во встроенных модулях, необходимо импортировать перед использованием. Аналогично, пользовательский модуль может иметь в себе один или несколько пользовательских объектов Python. Эти объекты можно импортировать в сеанс интерпретатора или другой скрипт.

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

Создание модуля

Ниже показан скрипт Python, содержащий определение функции sum() . Он сохраняется как calc.py .

 сумма по умолчанию (x, y):
    вернуть х + у
 

Импорт модуля

Теперь мы можем импортировать этот модуль и выполнить функцию sum() в оболочке Python.

 >>> импорт вычисл.
>>> расчет.сумма(5, 5)
10
 

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

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

 >>> импортировать математику
>>> тип(математика)
<класс 'модуль'>
>>> импортировать расчет
>>> тип(расч.)
<класс 'модуль'>
 

Переименование импортированного модуля

Используйте ключевое слово as , чтобы переименовать импортированный модуль, как показано ниже.

 >>> импортировать математику как кал
>>> кал.лог(4)
1.3862943611198906
 

из .. заявление об импорте

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

 сумма по умолчанию (х, у):
    вернуть х + у
среднее значение по умолчанию (x, y):
    вернуть (х + у)/2
степень защиты (х, у):
    вернуть х**у
 

Теперь мы можем импортировать одну или несколько функций, используя оператор from…import. Например, следующий код импортирует только две функции из файла test.py.

 >>> из суммы импорта функций, среднее
>>> сумма(10, 20)
30
>>> среднее(10, 20)
15
>>> мощность(2, 4)
 

В следующем примере импортируется только одна функция — сумма.

 >>> из суммы импорта функций
>>> сумма(10, 20)
30
>>> среднее(10, 20)
 

Вы также можете импортировать все его функции, используя синтаксис from...import * .

 >>> из импорта функций *
>>> сумма(10, 20)
30
>>> среднее(10, 20)
15
>>> мощность(2, 2)
4
 

Путь поиска модуля

Когда оператор импорта встречается либо в интерактивном сеансе, либо в сценарии:

  • Сначала интерпретатор Python пытается найти модуль в текущем рабочем каталоге.
  • Если он не найден, выполняется поиск каталогов в переменной окружения PYTHONPATH.
  • Если он все еще не найден, он ищет каталог установки по умолчанию.

При запуске интерпретатор Python помещает все вышеуказанные местоположения в список, возвращаемый атрибутом sys.path.

 >>> импорт системы
>>> sys.path
['','C:\\python36\\Lib\\idlelib', 'C:\\python36\\python36.zip',
'C:\\python36\\DLL', 'C:\\python36\\lib', 'C:\\python36',
'C:\\Users\\acer\\AppData\\Roaming\\Python\\Python36\\site-packages',
'C:\\python36\\lib\\сайт-пакеты']
 

Если требуемый модуль отсутствует ни в одном из указанных выше каталогов, выдается сообщение ModuleNotFoundError .

 >>> импортировать MyModule
Traceback (последний последний вызов):
Файл "", строка 1, в 
    ModuleNotFoundError: нет модуля с именем «MyModule»
 

Перезагрузка модуля

Предположим, вы уже импортировали модуль и используете его. Однако владелец модуля добавил или изменил некоторые функции после того, как вы его импортировали. Таким образом, вы можете перезагрузить модуль, чтобы получить последний модуль, используя reload() функция модуля imp , как показано ниже.

 >>> импорт имп
>>> имп.перезагрузка(расч.)
<модуль 'calc' (встроенный)>
 

Получение справки по модулям

Используйте функцию help(), чтобы узнать методы и свойства модуля. Например, позвоните в справку («математика») , чтобы узнать о математическом модуле. Если вы уже импортировали модуль, укажите его имя, например. справка(математика) .

Получение справки по модулю

Как показано выше, вы можете увидеть имена и описания методов. Он не будет отображать страницы справки, оканчивающиеся на —More—. Нажмите Enter, чтобы увидеть дополнительную справку.

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

Знать атрибуты и методы модуля

Узнайте об атрибутах модуля в следующей главе.

ссылка на файл go.mod — язык программирования Go

Каждый модуль Go определяется файлом go.mod, который описывает свойства, включая его зависимости от других модулей и версий Go.

К этим свойствам относятся:

  • Текущий путь модуля модуля . Это должно быть место, откуда модуль можно загрузить с помощью инструментов Go, таких как код модуля расположение репозитория. Это служит уникальным идентификатором в сочетании с номером версии модуля. Это также префикс пути к пакету для все пакеты в модуле. Подробнее о том, как Go находит модуль, см. Справочник по модулям Go.
  • Минимальная версия Go , необходимая для текущего модуля.
  • Список минимальных версий других модулей , требуемых текущим модулем.
  • Инструкции, опционально для заменить требуемый модуль на другой версия модуля или локальный каталог, или исключить конкретную версию необходимый модуль.

Go создает файл go.mod при запуске мода go init команда. В следующем примере создается файл go.mod, установка пути модуля модуля к example/mymodule:

 $ Пример инициализации модуля go mod/mymodule
 

Используйте команды go для управления зависимостями. Команды гарантируют, что требования, описанные в вашем файле go.mod, остаются неизменными, а содержание ваш файл go.mod действителен. Эти команды включают go get и go mod tidy и go mod edit команды.

Справку по командам go см. в разделе Команда go. Вы можете получить помощь из командной строки, набрав go help имя-команды , as с иди помоги мод приборки .

См. также

  • Инструменты Go вносят изменения в файл go.mod по мере их использования для управления зависимости. Дополнительные сведения см. в разделе Управление зависимостями.
  • Дополнительные сведения и ограничения, связанные с файлами go.mod, см. в модулях Go. ссылка.

Пример

Файл go.mod содержит директивы, как показано в следующем примере. Это описано где-то в этой теме.

Модуль
 example.com/mymodule
перейти 1.14
требовать (
    example.com/othermodule v1.2.3
    example.com/thismodule v1.2.3
    example.com/thatmodule v1.2.3
)
заменить example.com/thatmodule => ../thatmodule
исключить example.com/thismodule v1.3.0
 

модуль

Объявляет путь к модулю, который является уникальным идентификатором модуля. (в сочетании с номером версии модуля). Путь к модулю становится префикс импорта для всех пакетов, содержащихся в модуле.

Подробнее см. директиву модуля в Справочник по модулям Go.

Синтаксис

 модуль  модуль-путь  
модуль-путь
Путь к модулю, обычно расположение репозитория, из которого модуль можно загрузить с помощью инструментов Go. Для версий модуля v2 и позже это значение должно заканчиваться основным номером версии, например /v2 .

Примеры

Следующие примеры заменяют example.com для домена репозитория из который модуль может быть загружен.

Примечания

Путь к модулю должен однозначно идентифицировать ваш модуль. Для большинства модулей путь URL-адрес, по которому команда go может найти код (или перенаправление на код). Для модулей, которые никогда не будут загружаться напрямую, путь к модулю может быть просто какое-то имя, которым вы управляете, которое обеспечит уникальность. Префикс Пример / также зарезервирован для использования в подобных примерах.

Дополнительные сведения см. в разделе Управление зависимостями.

На практике путь к модулю обычно представляет собой домен репозитория источника модуля. и путь к коду модуля в репозитории. Команда go использует эту форму при загрузке версий модуля для разрешения зависимостей от имени пользователя модуля.

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

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

Например, если вы работаете в каталоге stringtools , ваш временный путь к модулю может быть /stringtools , как в следующем примере: где название компании название вашей компании:

 go mod init <название компании>/stringtools
 

перейти

Указывает, что модуль был написан с учетом семантики версии Go. указан директивой.

Для получения дополнительной информации см. директиву go в Справочник по модулям Go.

Синтаксис

 перейти  минимальная версия  
минимальная версия
Минимальная версия Go, необходимая для компиляции пакетов в этом модуле.

Примеры

  • Модуль должен работать на Go версии 1.14 или выше:
     перейти 1.14
     

Примечания

Директива go изначально предназначалась для поддержки обратной несовместимости изменения в языке Go (см. Go 2 переход). не было несовместимых язык изменился с тех пор, как были введены модули, но директива go по-прежнему влияет на использование новых языковых функций:

  • Для пакетов внутри модуля компилятор отклоняет использование функций языка введен после версии, указанной иди директива . Например, если модуль имеет директиву go 1.12 , его пакеты не могут использовать числовые литералы вроде 1_000_000 , которые были представлены в Go 1. 13.
  • Если более старая версия Go собирает один из пакетов модуля и сталкивается с ошибкой ошибка компиляции, ошибка отмечает, что модуль был написан для более новой версии Go версия. Например, предположим, что модуль имеет go 1.13 , а пакет использует числовой литерал 1_000_000 . Если этот пакет собран с помощью Go 1.12, компилятор отмечает, что код написан для Go 1.13.

Кроме того, команда go изменяет свое поведение в зависимости от версии указано в директиве go . Это имеет следующие эффекты:

  • В версии go 1.14 или более поздней версии может быть включено. Если файл vendor/modules.txt присутствует и соответствует go.mod , нет необходимости явно использовать флаг -mod=vendor .
  • В перейти на 1.16 или выше, все шаблоны пакетов соответствуют только пакетам транзитивно импортируется пакетами и тестами в основной модуль. Это тот же набор пакетов, сохраненный от перейти к поставщику модов , так как были введены модули. В более низкие версии, все также включают тесты пакетов, импортированных пакетами в основной модуль, тесты этих пакетов и так далее.
  • В перейти на 1.17 или выше:
    • Файл go.mod содержит явное требование директива для каждого модуля, который обеспечивает любой пакет, транзитивно импортированный пакетом или тестом в основном модуле. (В go 1.16 и ниже косвенная зависимость включается только при минимальном в противном случае выбор версии выберите другую версию.) Эта дополнительная информация включает график модуля обрезка и ленивый модуль загрузка.
    • Поскольку может быть гораздо больше // косвенных зависимостей, чем в предыдущем идут версии , косвенные зависимости записываются в отдельный блок в файле go.mod .
    • поставщик модов go опускает go. mod и файлы go.sum для вендоров зависимости. (Это позволяет вызывать команду go внутри подкаталоги поставщика для определения правильного основного модуля.)
    • go mod vendor записывает версию go из каждой зависимости go.mod файл в vendor/modules.txt .

Файл go.mod может содержать не более одной директивы go . Большинство команд добавят go директива с текущей версией Go, если она отсутствует.

требуется

Объявляет модуль как зависимость текущего модуля, указывая требуется минимальная версия модуля.

Подробнее см. директиву require в Справочник по модулям Go.

Синтаксис

 требуется  путь к модулю   версия модуля  
модуль-путь
Путь к модулю, обычно являющийся конкатенацией исходных файлов модуля. домен репозитория и имя модуля. Для версий модуля v2 и выше: это значение должно заканчиваться основным номером версии, например /v2 .
версия модуля
Версия модуля. Это может быть либо номер версии выпуска, например как v1.2.3, или номер псевдоверсии, сгенерированный Go, например v0.0.0-20200921210052-fa0125251cc4.

Примеры

Примечания

Когда вы запускаете команду go , такую ​​как go get , Go вставляет требует директив для каждого модуля, содержащего импортированные пакеты. Когда модуль еще не помечен свой репозиторий, Go присваивает псевдономер версии, который он генерирует, когда вы запускаете команда.

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

Дополнительные сведения о номерах версий см. в разделе Нумерация версий модулей.

Дополнительные сведения об управлении зависимостями см. в следующих разделах:

  • Добавление зависимости
  • Получение конкретной версии зависимости
  • Обнаружение доступных обновлений
  • Обновление или понижение версии зависимости
  • Синхронизация зависимостей вашего кода

заменить

Заменяет содержимое модуля определенной версии (или всех версий) на другую версию модуля или с локальным каталогом. Инструменты Go будут использовать путь замены при разрешении зависимости.

Для получения дополнительной информации см. заменить директиву в Справочник по модулям Go.

Синтаксис

 заменить  путь-модуля   [версия-модуля]  =>  путь-замены   [версия-замены]  
модуль-путь
Путь модуля для замены.
версия модуля
Дополнительно. Конкретная версия для замены. Если этот номер версии опущены, все версии модуля заменяются содержимым на правая сторона стрелки.
путь замены
Путь, по которому Go должен искать нужный модуль. Это может быть путь к модулю или путь к каталогу в локальной файловой системе сменный модуль. Если это путь к модулю, вы должны указать замена версии значение. Если это локальный путь, вы не можете использовать замена версии значение.
сменная версия
Версия сменного модуля. Замещающая версия может только следует указать, если replace-path — это путь к модулю (не локальный каталог).

Примеры

  • Замена на форк репозитория модулей

    В следующем примере любая версия example.com/othermodule заменяется с указанным ответвлением его кода.

     требуется example.com/othermodule v1.2.3
    заменить example.com/othermodule => example.com/myfork/othermodule v1.2.3-fixed
     

    При замене одного пути к модулю другим не изменяйте операторы импорта для пакетов в модуле, который вы заменяете.

    Дополнительные сведения об использовании разветвленной копии кода модуля см. в разделе Требование внешнего модуля. код из собственного форка репозитория.

  • Замена другим номером версии

    В следующем примере указывается, что следует использовать версию v1.2.3 вместо любая другая версия модуля.

     требуется example.com/othermodule v1.2.2
    заменить example.com/othermodule => example.com/othermodule v1.2.3
     

    В следующем примере модуль версии v1.2.5 заменяется версией v1.2.3 тот самый модуль.

     заменить example.com/othermodule v1.2.5 => example.com/othermodule v1.2.3
     
  • Замена местным кодом

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

     требуется example.com/othermodule v1.2.3
    заменить example.com/othermodule => ../othermodule
     

    В следующем примере указывается, что локальный каталог следует использовать в качестве замена только для v1. 2.5.

     требуется example.com/othermodule v1.2.5
    заменить example.com/othermodule v1.2.5 => ../othermodule
     

    Дополнительные сведения об использовании локальной копии кода модуля см. в разделе Требование кода модуля в локальный каталог.

Примечания

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

Используйте директивы exclude и replace для управления зависимостью во время сборки. разрешение при сборке текущего модуля. Эти директивы игнорируются в модули, которые зависят от текущего модуля.

Директива replace может быть полезна в следующих ситуациях:

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

Обратите внимание, что директива replace сама по себе не добавляет модуль в график модулей. А требуется директива который относится к замененной версии модуля, также необходимо либо в основном файл модуля go.mod или файл зависимости go.mod . Если у вас нет конкретную версию для замены, можно использовать поддельную версию, как в примере ниже. Обратите внимание, что это сломает модули, которые зависят от вашего модуля, так как заменить директивы применяются только в основном модуле.

 требуется example.com/mod v0.0.0-replace
заменить example.com/mod v0.0.0-replace => ./mod
 

Дополнительные сведения о замене необходимого модуля, в том числе об использовании инструментов Go для создания изменить, см. :

  • Требование кода внешнего модуля из собственного репозитория вилка
  • Требуется код модуля в локальном каталог

Дополнительные сведения о номерах версий см. в разделе Версия модуля. нумерация.

исключить

Указывает модуль или версию модуля, которые следует исключить из списка текущего модуля. график зависимости.

Подробнее см. исключить директиву в Справочник по модулям Go.

Синтаксис

 исключить  модуль-путь   модуль-версия  
модуль-путь
Путь модуля для исключения.
версия модуля
Исключаемая версия.

Пример

Примечания

Используйте директиву exclude , чтобы исключить определенную версию модуля, который косвенно требуется, но не может быть загружен по какой-то причине. Например, вы можете используйте его, чтобы исключить версию модуля с неверной контрольной суммой.

Используйте директивы exclude и replace для управления зависимостью во время сборки. разрешение при сборке текущего модуля (основной модуль, который вы создаете). Эти директивы игнорируются в модулях, зависящих от текущего модуля.

Вы можете использовать команду go mod edit чтобы исключить модуль, как в следующем примере.

 перейти к редактированию мода -exclude=example.com/[email protected]
 

Дополнительные сведения о номерах версий см. Нумерация версий модуля.

втянуть

Указывает, что версия или диапазон версий модуля, определенные go.mod не следует зависеть. Директива retract полезна, когда версия была опубликована преждевременно или серьезная проблема была обнаружена после того, как версия была опубликовано.

Для получения дополнительной информации см. директиву отзыва в Справочник по модулям Go.

Синтаксис

втягивать  версия  //  обоснование 
втянуть [  младшая версия  ,  младшая версия  ] //  обоснование 
 
версия
Одна версия для отзыва.
низкая версия
Нижняя граница диапазона версий для отзыва.
высшая версия
Верхняя граница диапазона версий для отзыва. Обе версии -младшая и версии включены в ассортимент.
обоснование
Необязательный комментарий, объясняющий опровержение. Может отображаться в сообщениях Пользователь.

Пример

  • Отзыв одной версии

     retract v1.1.0 // Опубликовано случайно.
     
  • Отказ от ряда версий

     retract [v1.0.0,v1.0.5] // Сборка не работает на некоторых платформах.
     

Примечания

Используйте директиву retract , чтобы указать, что предыдущая версия вашего модуля не следует использовать. Пользователи не будут автоматически обновляться до отозванной версии с go get , go mod tidy или другие команды. Пользователи не увидят отозванный версия как доступное обновление с go list -m -u .

Отозванные версии должны оставаться доступными, чтобы пользователи, которые уже зависят от них могут создавать свои пакеты. Даже если отозванная версия будет удалена из исходный репозиторий, он может оставаться доступным на зеркалах, таких как proxy.golang.org. Пользователи, зависящие от отозванных версии могут быть уведомлены, когда они запустят go get или перейти по списку -m -u на сопутствующие модули.

Команда go обнаруживает отозванные версии, читая директивы retract . в файле go.mod в последней версии модуля. Последняя версия, в порядке старшинства:

  1. Самая последняя версия выпуска, если таковая имеется
  2. Самая старшая предварительная версия, если таковая имеется
  3. Псевдоверсия для верхушки дефолтной ветки репозитория.

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

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

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