os.environ对C扩展模块的可见性

4
如果我使用os.environ更改环境变量,那么随后导入的模块会看到这种变化吗?
具体来说,sqlite3需要使用环境变量来确定其临时文件位置。但如果我在import sqlite3之前使用os.environ ['SQLITE_TMPDIR'] = '.',它就没有预期的效果。为什么?

RTFM:os.environ:“这个映射是在第一次导入os模块时捕获的,通常在Python启动时作为处理site.py的一部分。此后对环境所做的更改不会反映在os.environ中,除非通过直接修改os.environ进行更改。”此外,请参阅有一些平台相关功能的os.putenv文档。 - Paul Cornelius
如果您链接到它,阅读手册会更容易。 - Tadhg McDonald-Jensen
2
@PaulCornelius 你误解了文档。文档中说环境变量的更改不会反映在 os.environ 中。我正试图做相反的事情:更改 os.environ 以更改环境。文档中没有提到这一点。 - max
1个回答

2

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

然而,文档 表示:

如果平台支持 putenv() 函数,则可以使用此映射修改环境变量并查询环境变量。当映射被修改时,putenv() 将自动调用。

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

请注意,在 类 Unix 的操作系统上Windows 上,SQLite 读取不同的环境变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接