如何在Python中设置环境变量并在C扩展中使用它们

时间:2015-09-30 12:51:59

标签: python

我为C库创建了一个Python包装器。该库需要一个环境变量(MY_DATA_FOLDER)来指向包含一些数据文件的文件夹。在运行setup.py时,数据文件(在我的包装器的当前实现中)与Python包装器一起安装,并与包安装一起放在名为coefficients的文件夹中。我在包__init__.py中设置了环境变量,无论何时导入包都会有效:

# set environment variable
import os
from os.path import join, realpath, dirname
MY_DATA_FOLDER = join(realpath(dirname(__file__)), 'coefficients')
os.environ['MY_DATA_FOLDER'] = MY_DATA_FOLDER

# import the C extension (mymodule._mymodule) after setting the variable above
from mymodule import _mymodule

包装函数现在可用mymodule._mymodule.myfunction()。我用tox测试包,一切都运行良好。如果它有用,我的testenv会有以下命令:

commands =
    python setup.py clean --all build_ext --force --inplace
    {posargs:py.test -vv --ignore=src}

但是,当我使用python setup.py install(或developpip install .使用或不使用-e)安装软件包并打开Python shell来运行包装器时,C library给出错误,指示未设置环境变量。无论我运行一些自定义代码还是像tox一样运行py.test -vv --ignore=src,都会发生这种情况。一切都是可导入的,并且C扩展程序确实运行(即它已正确编译),但环境变量未传递,因此错误。

我已经把头撞到墙上一段时间了,我不知道出了什么问题,显然Google也没有。为什么环境变量在运行tox时可用于C扩展,但在正常安装时不可用?

如果需要,我很乐意提供更多信息。整个来源是here

更新

现在有效。这似乎是一个典型的案例,经过几个小时的斗争,放弃和离开工作,第二天回来,一切正常。"我不明白为什么,但我一定做错了。也许我的环境并不像我想的那么干净,或者我忘了激活它。

0 个答案:

没有答案