【问题标题】:ImportError when testing a local Azure Function (Python)?测试本地 Azure 函数 (Python) 时出现 ImportError?
【发布时间】:2020-06-04 03:49:16
【问题描述】:

当我尝试使用 VS Code 中的调试工具在本地运行 Python 函数时,我的一个依赖项出现 ImportError(可能与它的依赖项无关,但它是 pyodbc)。

我的requirements.txt 文件中列出了依赖项,并且在云中部署和运行时,整个事情都可以正常工作。

所以,问题很简单:如何通过确保正确导入具有依赖关系的本地 Python 函数来测试它们?

添加更多信息:

启动调试器时,将在 Azure Functions 项目根目录中的 .venv 上运行 pip 安装。根据我的调试器输出,文件存在:

Requirement already satisfied: pyodbc in ./.venv/lib/python3.7/site-packages (from -r requirements.txt (line 7)) (4.0.30)

日志如下:

[6/3/20 7:30:48 PM] Job host started
Hosting environment: Development
Content root path: /Users/my_user/Code/my_directory/azureFunctions
Now listening on: http://0.0.0.0:7071
Application started. Press Ctrl+C to shut down.

Http Functions:

        bhimodelv2: [GET,POST] http://localhost:7071/api/bhimodelv2

[6/3/20 7:30:53 PM] Host lock lease acquired by instance ID '000000000000000000000000391A9F18'.
[6/3/20 7:30:53 PM]  INFO: Starting Azure Functions Python Worker.
[6/3/20 7:30:53 PM]  INFO: Worker ID: e14f3a90-8abd-43f5-8148-90d9d3d98fe3, Request ID: 45d82e44-b75b-40c2-bc94-2afe387d401a, Host Address: 127.0.0.1:63322
[6/3/20 7:30:53 PM]  INFO: Successfully opened gRPC channel to 127.0.0.1:63322
[6/3/20 7:30:53 PM]  INFO: Received WorkerInitRequest, request ID 45d82e44-b75b-40c2-bc94-2afe387d401a
[6/3/20 7:30:53 PM]  INFO: Received FunctionLoadRequest, request ID: 45d82e44-b75b-40c2-bc94-2afe387d401a, function ID: 4cf1e7c7-82ea-4921-aee1-e521bd6c37a1
[6/3/20 7:30:53 PM] Worker failed to function id 4cf1e7c7-82ea-4921-aee1-e521bd6c37a1.
[6/3/20 7:30:53 PM] Result: Failure
[6/3/20 7:30:53 PM] Exception: ImportError: dlopen(/Users/my_user/Code/my_directory/azureFunctions/.venv/lib/python3.7/site-packages/pyodbc.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/unixodbc/lib/libodbc.2.dylib
[6/3/20 7:30:53 PM]   Referenced from: /Users/my_user/Code/my_directory/azureFunctions/.venv/lib/python3.7/site-packages/pyodbc.cpython-37m-darwin.so
[6/3/20 7:30:53 PM]   Reason: image not found
[6/3/20 7:30:53 PM] Stack:   File "/Users/my_user/.nvm/versions/node/v10.16.3/lib/node_modules/azure-functions-core-tools/bin/workers/python/3.7/OSX/X64/azure_functions_worker/dispatcher.py", line 243, in _handle__function_load_request
[6/3/20 7:30:53 PM]     func_request.metadata.entry_point)
[6/3/20 7:30:53 PM]   File "/Users/my_user/.nvm/versions/node/v10.16.3/lib/node_modules/azure-functions-core-tools/bin/workers/python/3.7/OSX/X64/azure_functions_worker/loader.py", line 66, in load_function
[6/3/20 7:30:53 PM]     mod = importlib.import_module(fullmodname)
[6/3/20 7:30:53 PM]   File "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
[6/3/20 7:30:53 PM]     return _bootstrap._gcd_import(name[level:], package, level)
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap_external>", line 728, in exec_module
[6/3/20 7:30:53 PM]   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
[6/3/20 7:30:53 PM]   File "/Users/my_user/Code/my_directory/azureFunctions/bhimodelv2/__init__.py", line 3, in <module>
[6/3/20 7:30:53 PM]     import pyodbc

因此,在 pip 安装成功后确认文件存在于虚拟环境中之后,就会发生导入错误。

【问题讨论】:

    标签: python azure azure-functions


    【解决方案1】:

    好吧,我错了——具体的模块是相关的。 pyodbc 在本地运行时需要您 brew install unixodbc。将函数部署到 Azure 时不会发现任何问题,因为 Azure 已经安装了这些驱动程序。

    这里是where I found that information

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 2015-04-13
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多