Ответ 1
Значение встроенной переменной [
__debug__
] определяется, когда интерпретатор запускается.
Итак, если вы не можете контролировать, как запущен интерпретатор python, то похоже, что вы не можете отключить assert.
Вот некоторые другие варианты:
- Самый безопасный способ - вручную удалить все утверждения assert.
-
Если все ваши утверждающие утверждения происходят на линиях сами по себе, то возможно, вы можете удалить их с помощью
sed -i 's/assert /pass #assert /g' script.py
Обратите внимание, что это приведет к искажению вашего кода, если другой код появится после утверждения. Например, команда sed выше прокомментировала бы
return
в строке следующим образом:assert x; return True
который изменит логику вашей программы.
Если у вас есть такой код, вероятно, было бы лучше вручную удалить утверждения.
-
Возможно, есть способ удалить их программным путем, проанализировав ваши script с модулем
tokenize
, но для написания такой программы удаление утверждений может занять больше времени, чем потребуется вручную удалите утверждения, особенно если это одноразовая работа. -
Если другая часть программного обеспечения принимает файлы .pyc, тогда есть грязный трюк, который, кажется, работает на моей машине, хотя обратите внимание на на Python основной разработчик предупреждает об этом (см. комментарий Éric Araujo 2011-09-17). Предположим, что ваш script называется
script.py
.-
Создайте временный script, вызываемый, скажем, temp.py:
import script
- Запустите
python -O temp.py
. Это создаетscript.pyo
. - Переместите
script.py
иscript.pyc
(если он существует) из вашего PYTHONPATH или любой другой каталог, который читает другое программное обеспечение, чтобы найти script. - Переименовать
script.pyo
→script.pyc
.
Теперь, когда другое программное обеспечение пытается импортировать ваш script, он будет только найдите файл
pyc
, который удаляет утверждения.Например, если
script.py
выглядит так:assert False print('Got here')
тогда запуск
python temp.py
теперь будет печататьGot here
вместо того, чтобы поднимать AssertionError. -