Защита импортированных модулей от повреждения сторонним кодом

Если в моем коде используются сторонние модули, которым нельзя доверять, есть ли что-нибудь, чтобы предотвратить такую ​​ситуацию:

UntrustedModule.py:

import random random.random = lambda : 4 

MyModule.py:

 import random import UntrustedModule print (random.random()) 

где только импорт этого модуля нарушает предположения о других, не связанных между собой?

3 Solutions collect form web for “Защита импортированных модулей от повреждения сторонним кодом”

Нет, вы не можете иметь такую ​​гарантию в Python, по крайней мере, не в реализации CPython. Когда вы импортируете модуль, его код запускается, и он имеет полный доступ к каждой части интерпретатора (и, вероятно, к большим частям вашей системы). Невозможно избежать этого. Неразумно когда-либо загружать ненадежный код, потому что его можно так много сделать.

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


PyPy реализует некоторые функции песочницы . Это не так просто, как просто «превратить песочницу», но это один из многих способов изолировать ненадежный код.

Вы можете сделать

 reload(random) 

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

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

Лучшим решением было бы проверить и написать тесты против вашего ненадежного модуля.

  • Google Analytics и Python
  • добавление двух последовательных номеров в список
  • Присвоение автора субъекту во время его создания
  • Существует стандартный способ объявить старые версии python неподдерживаемыми?
  • Скопировать файлы со странным именем в python получил ошибку 22
  • Невозможно обработать транзакцию с помощью модуля PayPal
  • В python, как вы импортируете все классы из другого модуля, не сохраняя пространство имён импортируемого модуля?
  • Selenium Grid2 - Можно ли запустить 10 экземпляров Chrome?
  • Python - лучший язык программирования в мире.