У меня есть смутное воспоминание об этом вопросе, заданном где-то в киберпространстве, но я не могу найти его снова.
Скажем, у меня есть файл с набором функций (и или классов), но я знаю, что некоторые из них не используются нигде в моем проекте. Есть ли инструмент для сканирования моего проекта, чтобы увидеть, какие функции не используются?
Я знаю, что могу сделать это индивидуально для каждой функции, например, используя Pycharm, но я не знаю, как это сделать для всех функций в файле. Похоже, для этого нужен инструмент, но я не знаю об этом.
РЕДАКТИРОВАТЬ
Я знаю, что есть крайние случаи кода, как указано в @deceze, которые делают этот вид проверки использования невозможным вообще. Но я был бы доволен инструментом, который работает в 99% случаев. Остальное можно поймать, например, с помощью единичных тестов и вручную обрабатывать.
Я не знаю ни о каком инструменте, который исследует весь ваш проект, но вы можете легко сделать один из нескольких строк кода, используя библиотеку jedi.
Здесь есть jedi.Script.usages, который именно здесь вы хотите, инструмент будет делать что-то вроде:
sys.path
PS: самым "сложным" шагом будет тот, который извлекает функции из ваших файлов python, но я думаю, что это также можно было бы сделать с помощью jedi, вместо этого используя другие встроенные синтаксические анализаторы python, здесь непроверенный фрагмент кода:
for definition in jedi.names(source, all_scopes=True, definitions=True, references=True):
if definition.parent().type == "function": # The name is located in a function ...
ass = definition.goto_assignments()
if len(ass) > 0 and ass[0].parent().type == "function": # ... and is assigned to in a function
print("Found a local variable:", definition.name)
Извлечен из этой проблемы github
Coverage.py - недавно использовал его, чтобы показать мое тестовое покрытие. Но его можно использовать и в других контекстах
getattr(foo, input('Enter function name'))()
, который невозможно отследить статическим инструментом.