Mam coraz więcej skryptów, które tworzą program, który piszę i zdecydowałem, że nadszedł czas, aby posprzątać moje drzewo źródłowe i spakować je poprawnie. Jestem pewien, że to proste pytanie, ale nie mogę się dowiedzieć, jak to zrobić.Pakiety "wewnątrz" modułów
Jeśli mam grupę modułów, które pasują do siebie, ale jeden powinien być modułem najwyższego poziomu, a pozostałe powinny być poprzedzone nazwą modułu, ale faktycznie przejść do pakietów niższego poziomu, jak to zrobić.
Powiedzmy na przykład, że chcę być w stanie uzyskać import mystuff
i zdobyć cały mędrca. ale powinienem także móc import mystuff.test.test1
. Myślałem, że chciałbym stworzyć drzewa źródłowego tak,
myprogram/
mystuff.py
mystuff/
__init__.py
tests/
__init__.py
test1.py
test2.py
...
Ale w tym przypadku, wydaje mystuff/
zawsze ma pierwszeństwo przed mystuff.py
, więc import mystuff
nic nie robi (tak długo, jak mystuff/
„s __init__.py
jest pusta).
Jakie byłoby właściwe podejście do uzyskania pożądanego zachowania? Czy nie jest to możliwe i muszę przenieść mystuff.py
do mystuff/
i trzeba uzyskać do niego dostęp jako mystuff.mystuff
(wydają się niepotrzebne powtarzania).
Przepraszam, jeśli właśnie przegapiłem coś oczywistego. Zakładam, że to musi być udokumentowane gdzieś, ale nie mogę znaleźć gdzieś gdzie.
Aktualizacja. Chociaż uważam, że metoda Ignacio jest właściwa, naprawdę jej nie lubię! Jeśli mam wiele plików otwartych w moim edytorze i wszystkie są nazywane __init__.py
rzeczy mogą stać się bałaganiarskie. Zdecydowałem się więc pozostawić moją strukturę taką, jaka jest, i połączyć mystuff.py
z mystuff/__init__.py
. Jeśli ktoś ma jakieś opinie na temat tego, dlaczego nie powinienem tego robić, chciałbym je usłyszeć.
Właściwie w końcu, jestem łącząc na odwrót, ponieważ nie mogłem znaleźć sposób, aby distutils dereference dowiązania podczas tworzenia tar.gz
, a skończyło się linki w moim wyjściu. W ten sposób działa to samo i sprawia, że jest szczęśliwy.
Tak. Nie powinieneś tego robić, ponieważ odpowiedź Ignatio jest właściwa. – cwallenpoole
@cwallenpoole.Zgadzam się, ale na koniec dnia sposób, w jaki mam to ustawienie, ma dokładnie taki sam efekt. Nawet wyjście 'sdist' będzie dokładnie takie samo jak wyjście Ignacio, bez moich linków. Dzięki temu ułatwi mi to rozwój. Czy jest jakiś inny powód, dla którego jest to złe? – tjm