提问人:jgabriel 提问时间:11/6/2023 更新时间:11/7/2023 访问量:56
有没有办法让一个 python 项目有两个虚拟环境?
Is there any way for a python project to have two virtual environments?
问:
我目前的 python 项目遇到了一个问题。
我为连接到 Sharepoint 而编写的 API 需要在 64 位 python 中运行。 Oracle API 需要从 python 32 位运行(由于服务器问题)。
当我单独运行脚本(每个脚本都有自己的 venv)时,一切都运行良好。
但是,当我在 32 位代码中导入 sharepoint 脚本时,它给出了一个错误。 在将 oracle 脚本导入 Sharepoint 代码时,情况也恰恰相反。
注意:当我提到导入时,它将导入另一个 python 文件作为模块:
from oracle import OracleCon
from sharepoint import SharePointCon
SharePoint 连接字符串:'Provider = Microsoft.ACE.OLEDB.12.0; WSS;IMEX= 2;RetrieveIds=Yes; DATABASE=site_url; LIST= list_id'
我尝试配置两个虚拟环境,但在导入另一个 python 文件时没有成功。
还尝试了不同的连接字符串来与 Sharepoint 交互,但没有成功:'Provider = Microsoft.JET.OLEDB.4.0; WSS;IMEX= 2;RetrieveIds=Yes; DATABASE=site_url; LIST= list_id'
需要: 或者找到一种可靠的方法来运行两个版本的 python。 或者找到一种在 32 位 Python 中连接到 Sharepoint 的方法。
答:
在同一进程中运行两个不同的 Python 版本(32 位和 64 位)是不可行的。在大多数情况下,您无法同时加载 32 位和 64 位库和 DLL,因此在同一进程中拥有两个不同的 Python 环境是不切实际的。
解决问题的一种潜在方法是让 32 位和 64 位组件通过中间进程或服务进行通信。这是你如何做到的:
创建两个单独的脚本,一个用于 32 位组件 (Oracle),另一个用于 64 位组件 (Sharepoint)。
创建一个 API 服务或作为独立进程运行的单独脚本,该进程可以与 32 位和 64 位组件进行通信。此服务可以充当应用程序的两个部分之间的桥梁。
API 服务应公开终结点或方法,以便与 32 位和 64 位组件进行交互。这可以使用 REST API、消息队列或任何其他合适的进程间通信 (IPC) 机制等技术来完成。
在 32 位和 64 位脚本中,使用库或模块向 API 服务发出数据交换请求。
API 服务将处理来自两个组件的请求,并调解它们之间的数据交换。
这种方法将 32 位和 64 位组件分离,允许它们在不同的环境中运行,同时仍使它们能够有效通信。它可能需要一些额外的开发和设置,但它应该提供一种可靠的方法来连接应用程序的两个部分。
至于在 32 位 Python 中连接到 Sharepoint,您可能需要探索与 32 位 Python 兼容的替代库或方法。遗憾的是,某些库和驱动程序可能有特定要求,您可能需要查阅 Sharepoint 的官方文档或支持渠道,以找到适用于 32 位 Python 的解决方案。
运行两个通过网络通信的 docker 容器可能是更好的方法。一个用于 sharepoint,另一个用于 Oracle API。
评论
python main.py
main.py
oracle
sharepoint
python main.py