在我的一个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导入在功能的单元测试中起作用,但是当我在控制台中调用该功能时却不起作用。