2013-07-05 50 views
8

我知道命名一個以數字開頭的Python模塊是一個壞主意,如this other question中所述,但我想知道在Python包而不是模塊(又名文件)中這樣做是否合法。Python包名可以以數字開頭嗎?

例如。我想將一個Django網站與一些外部API集成在一起,並且我想創建一個「第三方」包,其中包含每個提供商的文件,我不知道是否調用它3rd_party會變得令人頭疼,或者我應該將其命名爲third_party相反,爲了避免問題。

注:我不知道,如果它很重要,但我使用Python 2.7

回答

15

不,不能。 Python包和模塊名稱必須valid identifiers

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

標識符必須以字母或下劃線開頭。

import statement定義模塊,語法:

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

包是一種特殊的模塊(如__init__.py文件的目錄來實現),並沒有從這些規則的約束。

技術上您可以解決此通過不使用import聲明,作爲importlib模塊和__import__鉤不執行的限制。然而,爲您的軟件包或模塊命名並不是一個好主意,因此您需要使用非標準的導入機制來使其工作。

+0

我問包,不模塊導入。 – Caumons

+2

包是作爲目錄實現的專用模塊,因此規則仍然適用。 –

+0

好的,所以包,以及模塊不能以數字開頭。所以,我會用'third_party'去。謝謝! :) – Caumons

4

是的。

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

從另一個文件

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

在你的例子中'1.py'是一個Python模塊,而不是一個包。 – Caumons

+3

需要解決方法不會使其他人有用的模塊。 –

+0

我同意@MartijnPieters,我會接受他的回答,因爲它完美地解釋了案件並解決了我的疑問。謝謝! – Caumons