2013-07-05 9 views
8

So che nominare un modulo Python che inizia con un numero è una cattiva idea, come indicato in this other question, ma mi chiedo se sia legale farlo in un pacchetto Python, non in un modulo (detto anche file).Un nome di pacchetto Python può iniziare con un numero?

Ad esempio. Voglio integrare un sito Web Django con alcune API esterne e volevo creare un pacchetto "di terze parti" contenente un file per ciascun provider e non so se chiamarlo 3rd_party diventerà un mal di testa o dovrei chiamarlo third_party invece, per evitare problemi.

Nota: Non so se è importante, ma sto usando Python 2.7

risposta

15

No, non può. package Python e nomi dei moduli devono essere valid identifiers:

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

identificatori must iniziano con una lettera o un carattere di sottolineatura.

Il import statement definisce la grammatica per i moduli come:

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

pacchetti sono un tipo speciale di modulo (implementato come una directory con __init__.py file) e non sono esenti da queste regole.

Tecnicamente si può aggirare il problema, non utilizzando l'istruzione import, come il modulo importlib e __import__ gancio non rispettare la limitazione. Non è tuttavia una buona idea denominare il pacchetto o il modulo in modo tale che sia necessario utilizzare meccanismi di importazione non standard per farlo funzionare.

+0

Sto chiedendo sui pacchetti, non moduli. I pacchetti – Caumons

+2

sono moduli specializzati implementati come directory, quindi le regole rimangono valide. –

+0

OK, quindi i pacchetti, così come i moduli non possono iniziare con un numero. Quindi, andrò con 'third_party'. Grazie! :) – Caumons

4

Sì.

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

importarlo da un altro file

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

Nell'esempio '1.py' è un modulo Python, non un pacchetto. – Caumons

+3

Richiedere un work-around non rende un modulo utile ad altri. –

+0

Sono d'accordo con @MartijnPieters, accetterò la sua risposta in quanto ha spiegato perfettamente il caso e risolto il mio dubbio. Grazie! – Caumons

Problemi correlati