2013-07-05 13 views
8

Wiem, że nazwanie modułu Pythona zaczynającego się od numeru jest złym pomysłem, jak stwierdzono w this other question, ale zastanawiam się, czy to jest legalne, aby to zrobić w pakiecie Python, a nie module (aka pliku).Czy nazwa pakietu Python może zaczynać się od cyfry?

Na przykład. Chcę zintegrować witrynę Django z niektórymi zewnętrznymi interfejsami API i chciałem stworzyć pakiet "trzeciej strony", zawierający plik dla każdego dostawcy, i nie wiem, czy nazwanie go 3rd_party stanie się bólem głowy, czy powinienem go nazwać third_party zamiast tego, aby uniknąć problemów.

Uwaga: Nie wiem, czy to ważne, ale używam Python 2.7

Odpowiedz

15

Nie, to nie możliwe. Pakiet Python i nazwy modułów muszą być valid identifiers:

identifier ::= (letter|"_") (letter | digit | "_")* 

Identyfikatory must zaczynać się od litery lub znaku podkreślenia.

import statement definiuje gramatyki dla modułów jak:

module   ::= (identifier ".")* identifier 

Paczki są specjalnym rodzajem modułu (realizowanego w katalogu z __init__.py pliku) i nie są zwolnione od tych zasad.

Technicznie można obejść ten problem przez nie za pomocą instrukcji import, jako moduł importlib i __import__ haka nie egzekwowania ograniczeń. Nie jest jednak dobrym pomysłem nazwać twojego pakietu lub modułu tak, że musisz użyć niestandardowych mechanizmów importu, aby to działało.

+0

Pytam o pakietach, nie w postaci modułów. Pakiety – Caumons

+2

to specjalistyczne moduły zaimplementowane jako katalogi, więc zasady nadal obowiązują. –

+0

OK, więc pakiety, a także moduły nie mogą zaczynać się od liczby. Więc pójdę z 'third_party'. Dzięki! :) – Caumons

4

Tak.

# 1/x.py dont forget 1/__init__.py 
x = 42 

zaimportować go z innego pliku

# test.py 
p1 = __import__('1.x') 
print p1.x.x 
+0

W twoim przykładzie '1.py' jest modułem Pythona, a nie pakietem. – Caumons

+3

Wymóg obejścia się nie powoduje, że moduł jest przydatny dla innych. –

+0

Zgadzam się z @MartijnPieters, przyjmuję jego odpowiedź, ponieważ doskonale wyjaśnił sprawę i rozwiązał moje wątpliwości. Dzięki! – Caumons

Powiązane problemy