17

我知道命名一个以数字开头的 Python 模块是一个坏主意,正如另一个问题中所述,但我想知道在 Python 包中这样做是否合法,而不是在模块(又名文件)中这样做。

例如。我想将一个 Django 网站与一些外部 API 集成,我想创建一个“第三方”包,其中包含每个提供者的文件,我不知道调用它是否3rd_party会让人头疼,或者我应该命名它third_party,以避免出现问题。

注意:我不知道这是否重要,但我使用的是 Python 2.7

4

2 回答 2

27

不,它不能。Python 包和模块名称需要是有效的标识符

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

标识符必须以字母或下划线开头。

import 语句将模块的语法定义为:

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

包是一种特殊的模块(实现为带有__init__.py文件的目录)并且不能免除这些规则。

从技术上讲import,您可以通过不使用该语句来解决此问题,因为importlib模块和__import__挂钩不强制执行限制。然而,命名你的包或模块并不是一个好主意,这样你就需要使用非标准的导入机制来使其工作。

于 2013-07-05T10:55:45.193 回答
4

是的。

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

从另一个文件导入

# test.py
p1 = __import__('1.x')
print p1.x.x
于 2013-07-05T11:01:34.610 回答