Potrzebuję sposobem na znalezienie zależności dla każdego z podmodułów mojego Python pakiet w czasie wykonywania więc mogę zainicjować je w odpowiedniej kolejności (patrz mój obecny [EDIT:były] rozwiązanie here , co nie działa dobrze), więc najpierw użyłem standardowego modułu Pythona modulefinder, ale było to zbyt wolne (~ 1-2 sekundy na moduł).Python analizator zależność biblioteki
Moim następnym wyborem była analiza wszystkich globałów każdego modułu i znalezienie od tych globalnych, od których podmodułów zależy każdy submoduł. (To jest moje obecne rozwiązanie EDYCJA: Mam teraz lepsze rozwiązanie - zobacz moją odpowiedź). Algorytm ten jest znacznie większy niż szybszy niż modulefinder (zajmuje < 200 ms na moduł), ale działa tylko w przypadku względnego importu, zamiast w pełni kwalifikowanego stylu importu, co jest niedopuszczalne.
Więc, co potrzebne jest albo:
- Szybszą alternatywą modulefinder
- Alternatywny algorytm
UWAGA: nazywam mój analizator zależnościach na początku każdy moduł, jak poniżej:
# File my_package/module3.py
import my_package.module1 # Some misc. module
import my_package.module2 # Some other misc. module
import my_package.dependency_analyzer
my_package.dependency_analyzer.gendeps()
(Tylko na wszelki wypadek).
Dziękujemy!
EDYCJA: Mam rozwiązanie teraz - zobacz moją odpowiedź.
Dlaczego tak się dzieje w czasie wykonywania? Czy te zależności zmieniają się w czasie wykonywania? –
Zwykle (są pewne wyjątki), ale nie chcę dodawać dodatkowego pliku mapy zależności dla każdego z moich modułów (co brzmi tak, jak sugerujesz), więc zdecydowałem się przeanalizować zależności każdego modułu podczas uruchamiania. czas. – DangerOnTheRanger
Możesz też zaimplementować swoje pakiety z pewną leniwą inicjalizacją, aby ich kolejność inicjowania nie miała znaczenia. – rafalotufo