【问题标题】:Visibility of os.environ to C extension modulesos.environ 对 C 扩展模块的可见性
【发布时间】:2016-08-12 10:47:58
【问题描述】:

如果我使用 os.environ 更改环境变量,我之后导入的模块会看到该更改吗?

具体来说,sqlite3requires 使用环境变量来确定其临时文件位置。但是如果我在import sqlite3 之前使用os.environ['SQLITE_TMPDIR'] = '.',它并没有达到预期的效果。为什么?

【问题讨论】:

  • RTFM: os.environ: “这个映射是在第一次导入 os 模块时捕获的,通常在 Python 启动期间作为处理 site.py 的一部分。在此之后对环境所做的更改不会反映在 os.environ 中,但直接修改 os.environ 所做的更改除外。”另请参阅 os.putenv 的文档,它具有一些平台相关的功能。
  • 如果你link to it,阅读手册会更容易。
  • @PaulCornelius 您误解了文档。它说环境的变化不会反映在os.environ 中。我试图做相反的事情:更改os.environ 以更改环境。文档对此只字未提。

标签: python python-3.x sqlite environment-variables


【解决方案1】:

sqlite3 模块只是 SQLite C 库的包装器,因此它不会直接看到对 os.environ 所做的任何更改。

但是,documentation 说:

如果平台支持putenv()功能,这个映射可以用来修改环境和查询环境。修改映射时会自动调用putenv()

因此,如果在您更改 os.environ 后初始化 SQLite 库,它将看到更改。

请注意,SQLite 读取不同的环境变量on Unix-y OSeson Windows

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    相关资源
    最近更新 更多