我知道命名一个以数字开头的Python模块是一个坏主意,如this other question中所述,但我想知道在Python包中是否合法,而不是模块(也就是文件) )。
例如。我想将Django网站与一些外部API集成,我想创建一个“第三方”软件包,其中包含每个提供商的文件,我不知道调用它3rd_party
是否会成为头痛或我应该将其命名为third_party
,以避免出现问题。
注意:我不知道是否重要,但我使用的是Python 2.7
答案 0 :(得分:18)
不,它不能。 Python包和模块名称必须是valid identifiers:
identifier ::= (letter|"_") (letter | digit | "_")*
标识符必须以字母或下划线开头。
import statement将模块的语法定义为:
module ::= (identifier ".")* identifier
包是一种特殊的模块(实现为具有__init__.py
文件的目录),并且不受这些规则的约束。
技术上您可以通过不使用import
语句解决此问题,因为importlib
模块和__import__
挂钩不会强制执行限制。但是,为您的软件包或模块命名,以便您需要使用非标准导入机制才能使其正常工作,这不是一个好主意。
答案 1 :(得分:4)
是
# 1/x.py dont forget 1/__init__.py
x = 42
从其他文件导入
# test.py
p1 = __import__('1.x')
print p1.x.x