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