通过ctypes加载* .dll在Django单元测试中有效,但否则失败

时间:2019-03-25 14:10:48

标签: django python-3.x windows ctypes

在我的一个Django模型中,我定义了一个函数,该函数通过切换到目录然后通过ctypes.CDLL导入该库来加载外部* .dll库,因此原则上我就是这样做的模型的功能:

basepath = os.getcwd()
_DIRNAME = os.path.dirname(__file__)
dllspath = os.path.join(_DIRNAME, "dlls_x64")
os.chdir(dllspath)
__libx64 = ctypes.CDLL("libx64")
...
os.chdir(basepath)

我确定在函数调用期间不建议更改目录,这是一个不好的设计,但是现在我只想了解什么 ctypes.CDLL确实在做。

因为当我在单元测试中测试此功能时,可以找到该库并且不会引发任何错误。 但是,当我在python控制台中交互式测试代码时,找不到该模块:

OSError: [WinError 126] The specified module could not be found

我使用模块django-test-without-migrations和sqlite后端运行单元测试,因为我无法为生产oracle后端创建单元测试数据库。因此,对于单元测试,我这样做:

python manage.py test --nomigrations --settings=settings.unittests

和settings.unittests.py包含:

from settings.defaults import *
DATABASES['default'] = {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db_unittests.sqlite3')
    }

在使用交互式python控制台时,我去了:

python manage.py shell_plus

所以我不明白为什么* .dll导入在功能的单元测试中起作用,但是当我在控制台中调用该功能时却不起作用。

0 个答案:

没有答案