Python CGI脚本激活venv虚拟环境时遭遇ModuleNotFoundError
问题:CGI脚本中激活venv后无法导入transformers模块
我刚开始使用huggingface transformers库,通过PyTorch和venv进行试验。在Shell中激活venv虚拟环境一切正常,但在Python CGI脚本中按如下方式激活时却出现问题:
# Importing libraries for virtual environment import subprocess # Defining function for activating/deactivating virtual environment def activate_virtual_environment(): # Build the path to the activation script activation_script = f"/xampp/htdocs/cgi_bin/env/Scripts/activate" # Activate the virtual environment using subprocess subprocess.run([activation_script], shell=True) def deactivate_virtual_environment(): # Deactivate the virtual environment using subprocess subprocess.run(["deactivate"], shell=True) # Activating virtual environment activate_virtual_environment() # Importing 'pipeline' from transformers import pipeline
执行脚本时会报错ModuleNotFoundError: No module named 'transformers',虚拟环境路径确认正确,请问忽略了什么?
解决方案
核心原因
用subprocess.run()运行activate脚本,只会在子进程中激活虚拟环境,当前CGI脚本的主进程完全不受影响——主进程的Python环境还是系统默认的,自然找不到安装在venv里的transformers模块。同理,单独调用deactivate命令也无效,子进程执行完就结束,不会改变主进程的环境。
两种解决办法
直接指定虚拟环境的Python解释器运行脚本
- 找到venv中的Python路径:Windows下是
/xampp/htdocs/cgi_bin/env/Scripts/python.exe,Linux/macOS下是/xampp/htdocs/cgi_bin/env/bin/python - 在CGI脚本的第一行添加shebang,指定用这个解释器:
#!/xampp/htdocs/cgi_bin/env/Scripts/python.exe - Linux/macOS环境下还需要给脚本添加可执行权限:
chmod +x your_script.py
- 找到venv中的Python路径:Windows下是
手动将venv的site-packages路径加入sys.path
在导入transformers前,把虚拟环境的site-packages目录添加到Python的模块搜索路径中:import sys # Windows系统路径示例 sys.path.append("/xampp/htdocs/cgi_bin/env/Lib/site-packages") # Linux/macOS系统路径示例(需替换X.X为你的Python版本号,比如3.10) # sys.path.append("/xampp/htdocs/cgi_bin/env/lib/pythonX.X/site-packages") from transformers import pipeline注意:需要确认site-packages的具体路径,不同系统和Python版本会有细微差异。
内容的提问来源于stack exchange,提问作者Liesel_Weppen
相关产品推荐
相关产品推荐

