有没有办法让一个 python 项目有两个虚拟环境?

Is there any way for a python project to have two virtual environments?

提问人:jgabriel 提问时间:11/6/2023 更新时间:11/7/2023 访问量:56

问:

我目前的 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-3.x 64 32 位

评论

3赞 Daviid 11/6/2023
您可以在虚拟环境中运行 2 个版本的 python,但是执行诸如 where import both 和 and 并使用 2 个版本之类的操作,我认为这是不可能的。在你这样做的那一刻,你已经坚持了一个版本python main.pymain.pyoraclesharepointpython main.py
2赞 JonSG 11/6/2023
我的直觉告诉我,与其找到一种让 Sharepoint 在 32 位 python 中运行的方法,不如寻找一种让 Oracle 在 64 位 python 中可靠运行的方法。也许您可以详细说明为什么 Oracle 在这种环境中不适合您。
1赞 Charles Duffy 11/6/2023
Oracle 肯定拥有在 64 位环境中可靠运行的客户端库;这是一个非常可以解决的问题。

答:

-1赞 Jawan Pakistan 11/6/2023 #1

在同一进程中运行两个不同的 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 的解决方案。

0赞 komal sai 11/7/2023 #2

运行两个通过网络通信的 docker 容器可能是更好的方法。一个用于 sharepoint,另一个用于 Oracle API。