PythonAnywhere上Django项目中PyRFC Connection导入失败问题求助
PythonAnywhere上Django项目中PyRFC Connection导入失败问题求助
各位好,我在PythonAnywhere服务器上的Django项目里使用PyRFC库连接SAP系统时碰到了一个棘手的问题,想请大家帮忙分析一下。
具体情况是这样的:我尝试从PyRFC导入Connection类来建立SAP连接,但在views.py里执行导入操作时总是触发ImportError;可奇怪的是,同样的代码在Django shell里却能完全正常运行,Connection类也能顺利导入使用,这让我完全摸不着头脑。
先给大家说说不同导入方式下的错误表现:
- 如果我没有显式导入,直接在代码里使用
Connection,会得到这个错误:
SAP Connection failed: name 'Connection' is not defined
- 当我显式写
from pyrfc import Connection时,WSGI应用就会崩溃,日志里的错误信息如下:
2025-01-22 07:28:52,598: Error running WSGI application 2025-01-22 07:28:52,599: ImportError: cannot import name 'Connection' from 'pyrfc' (/home/moeez007/.local/lib/python3.10/site-packages/pyrfc/__init__.py) 2025-01-22 07:28:52,599: File "/var/www/moeez007_pythonanywhere_com_wsgi.py", line 80, in <module> 2025-01-22 07:28:52,600: from pyrfc import Connection
为了解决这个问题,我已经做了这些尝试:
- 反复确认了
SAP_NWRFC_HOME和LD_LIBRARY_PATH这两个环境变量的路径是正确的,而且libsapnwrfc.so库在shell环境下能成功加载; - 尝试在项目的WSGI文件里直接设置这两个环境变量,代码如下:
import os os.environ["SAP_NWRFC_HOME"] = "/home/moeez007/nwrfcsdk" os.environ["LD_LIBRARY_PATH"] = "/home/moeez007/nwrfcsdk/lib"
但设置完成后重新部署,问题依然没有解决;
- 我还把连接SAP的代码单独抽出来写成一个独立的Python脚本运行,结果还是触发了和视图里一样的ImportError。
最后附上我views.py里的连接测试视图代码,供大家参考:
import pyrfc from pyrfc import * import logging logger = logging.getLogger(__name__) def sap_conn_test(request): if request.method == "GET": try: print(os.environ.get("SAP_NWRFC_HOME")) print(os.environ.get("LD_LIBRARY_PATH")) sap_conn = XPL_SAP_CON.objects.first() conn = Connection( user=sap_conn.user_name, passwd=sap_conn.password, ashost=sap_conn.server_address, sysnr=sap_conn.system_number, client=sap_conn.client_number, ) response = { "message": "SAP Connection successful!", "status": "success" } except Exception as e: response = { "message": f"SAP Connection failed: {e}", "status": "error" } return JsonResponse(response) return JsonResponse({"message": "Invalid request method.", "status": "error"})
真心请教各位,为什么同样的代码在Django shell里能正常工作,到了WSGI应用(视图/独立脚本)里就会出现Connection导入失败的问题呢?有没有什么我漏掉的排查点或者解决办法?
备注:内容来源于stack exchange,提问作者Moeez Bin Nadeem
相关产品推荐
相关产品推荐

