Python - 包和设置文件

4 投票
2 回答
1105 浏览
提问于 2025-04-17 06:21

我有一个Python包,需要从我的项目目录中获取设置,这里是我项目的当前结构:

~/Project/bin/mypackage
    - package files
    
~/Project/myproject/
    - project files
    - start.py
    - settings.py

我想这和Django的结构有点像,你的项目目录里有一个settings.py文件,这个文件在某种程度上被Django系统包引用。

所以,如果我像这样运行start.py

python ~/Project/myproject/start.py

..而且start.py导入并使用了mypackage这个包,有没有办法让我在包里面引用start.py本地的settings.py文件呢?我是不是需要在start.py中加载设置文件,然后把值存储在一个全局变量里?有没有人知道这样做是否可行?

2 个回答

3

我认为你有几种选择:

  1. 查找设置并从当前工作目录或环境变量中导入它们。这就是所谓的“django方式”,使用 DJANGO_SETTINGS_MODULEPYTHONPATH。当它正常工作时,这种方法很方便,但如果不行,比如你在不同的目录下运行时,就会很麻烦。

  2. 依赖模块搜索路径,这样会包含调用包的目录。这种方法简单明了,但设置会根据调用者的不同而变化。例如,在 mypackage 中,你只需要:

    import settings

  3. settings 作为一个变量传入

2

用来启动Python解释器的脚本所在的文件夹会被加入到PYTHONPATH中。这个路径可以通过sys.path[0]来查看。想了解更多,可以参考这个链接:http://docs.python.org/library/sys.html#sys.path

这意味着你可以通过import settings直接从mypackage.mymodule中使用settings

不过,我建议你在start.py中处理设置的加载,并且把你的应用结构设计得更好,这样可以把一个设置对象(可能只是一个字典)传递给它。

撰写回答