Python 定义包级路径常量
我经常发现我想在包级别定义常量,主要用于定义文件系统层次结构中模块之上的路径。我有以下方法: 董事结构:Python 定义包级路径常量,python,import,package,Python,Import,Package,我经常发现我想在包级别定义常量,主要用于定义文件系统层次结构中模块之上的路径。我有以下方法: 董事结构: my_project tests examples data my_package __init__.py mod1.py mod2.py ... my\u project/my\u package/\uuu init\uuuuuuuuuuuuuuuuuuuuuuuupy的内容: impor
my_project
tests
examples
data
my_package
__init__.py
mod1.py
mod2.py
...
my\u project/my\u package/\uuu init\uuuuuuuuuuuuuuuuuuuuuuuupy的内容
:
import my_package
import os
__package_path = os.path.split(my_package.__path__[0])[0]
TESTS_FOLDER = os.path.join(__package_path, 'tests')
EXAMPLES_FOLDER = os.path.join(__package_path, 'examples')
DATA_FOLDER = os.path.join(__package_path, 'local')
del my_package
del os
del __package_path
导入我的\u包
导入操作系统
__package_path=os.path.split(my_package.uuu path_uuu[0])[0]
TESTS\u FOLDER=os.path.join(\u包\u路径,'TESTS'))
EXAMPLES\u FOLDER=os.path.join(\u包\u路径,'EXAMPLES'))
DATA\u FOLDER=os.path.join(\u包\u路径,'local')
这允许,例如:
导入我的\u包
my_package.TESTS#文件夹#返回测试的路径
作为获取模块或项目文件的文件路径的解决方案,这看起来相当不错——对于如何获取脚本的有效路径(例如)有很多讨论/困惑。我的问题:在自己的
\uuu init\uuuuuuuupy
中导入我的\u包是否会导致异常/不希望的行为?或者:定义包级常量的惯用方法是什么?这看起来是普遍接受的,如图和所示。下面是\uuuu init\uuuu.py
的改进版本:
import my_package
import os
__package_path = os.path.split(my_package.__path__[0])[0]
TESTS_FOLDER = os.path.join(__package_path, 'tests')
EXAMPLES_FOLDER = os.path.join(__package_path, 'examples')
DATA_FOLDER = os.path.join(__package_path, 'local')
del my_package
del os
del __package_path
del
语句防止不需要的变量暴露在my_package
名称空间中,因此您不能做这样奇怪的事情:
import my_namespace
print(my_namespace.my_namespace.my_namespace.TESTS_FOLDER)
在其他地方,有时会使用行\uuuu all\uuuu=[“TESTS\u FOLDER”、“EXAMPLES\u FOLDER”、“DATA\u FOLDER”]
,但这仅适用于my\u namespace import*
中的特定导入结构。因此,del
方法更可取