Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 定义包级路径常量_Python_Import_Package - Fatal编程技术网

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
方法更可取