2016-10-24 20 views
5

Czasami zdarza się kolizja nazw modułów między aplikacją a plikiem wewnętrznym w pakiecie innej firmy. Na przykład plik o nazwie profile.py w bieżącym folderze spowoduje, że jupyter notebook ulegnie awarii podczas próby zaimportowania go zamiast własnego profile.py. Jaki jest dobry sposób na uniknięcie tego problemu z perspektywy użytkownika pakietu? (Czy jest to coś, co twórca pakietów powinien w jakiś sposób zapobiec?)Radzenie sobie z kolizją nazw modułów

Uwaga: podczas gdy podobny problem występuje z powodu kolizji między aplikacją a wbudowanymi nazwami (np. time.py lub socket.py), to przynajmniej stosunkowo łatwo jest zapamiętaj nazwy standardowych modułów bibliotecznych i innych wbudowanych obiektów.

Odpowiedz

2

Bieżący katalog to katalog zawierający główny skrypt aplikacji. Jeśli chcesz uniknąć kolizji nazw w tym katalogu, nie umieszczaj w nim żadnych modułów.

Zamiast tego należy użyć przestrzeni nazw. Utwórz unikalnie nazwany pakiet w katalogu głównego skryptu i zaimportuj wszystko. Głównym skrypt powinien być bardzo proste i nie zawierają niczego więcej niż to:

if __name__ == '__main__': 

    from mypackage import myapp 

    myapp.run() 

Wszystkie moduły wewnątrz opakowania powinny również korzystać from import aby uzyskać dostęp do innych modułów w ramach pakietu. Na przykład myapp.py może zawierać:

from mypackage import profile 
Powiązane problemy