我正在尝试运行一个使用 Anaconda 编写的 python 程序作为 Windows 服务。复杂的是我想从特定的 conda 虚拟环境运行 Windows 服务。这个想法是在未来,我们可能会开发更多基于 python 的 Windows 服务,这些服务可能具有不同的模块依赖关系,因此将每个服务保持在自己的虚拟环境中将是理想的。
我找到了几篇关于如何将 python 程序编写为 Windows 服务的优秀文章,它们运行良好。我创建了一个非常简单的测试程序,它只是在服务启动后将一些消息写入文本文件。我可以成功地将这个测试 python 程序安装为 Windows 服务,并且我在我的文件中看到了各种文本消息。但是,当我尝试将 Numpy 或 TensorFlow 等模块导入到我的简单测试 Python 程序中时,该服务将无法启动,并且我收到无法找到它们各自 DLL 的失败消息。
我确定问题是因为所需的 conda 虚拟环境尚未激活。同时,我尝试在系统级别复制各种 conda 环境变量;尝试将所有必需的python库路径从虚拟环境添加到系统路径和系统范围的python路径,但无济于事。
我怀疑如果我可以激活 conda 虚拟环境作为我的 python 代码的一部分,那将解决问题。(我还怀疑将所有必需的模块安装到我的基本配置中会解决问题,但我想避免这种情况)。
这是我编写的小测试程序。该程序与基本的 Python 模块(如 sys、os 等)一起工作得很好。当我尝试运行它并包含 Numpy 或 TensorFlow 时,它失败并显示以下错误消息:(这是我尝试启动服务后的 Windows 事件查看器 - 安装正确):
Python 无法导入服务的模块 Traceback(最近一次调用最后一次):文件 "D:\TFS\Projects\DEV\AEPEnrollmentForms\src\aepenrl\Windows_Service_Example.py",第 35 行,在 import numpy as np File "C:\ Users\pboerner\AppData\Local\conda\conda\envs\aepenr\lib\site-packages\numpy__init__.py”,第 140 行,来自 . 导入 _distributor_init 文件“C:\Users\pboerner\AppData\Local\conda\conda\envs\aepenr\lib\site-packages\numpy_distributor_init.py”,第 34 行,从 . 导入 _mklinit 导入错误:DLL …