更改Python解释器的中间脚本

6

我有三个 .py 文件,用于在 Windows 机器上运行一个项目。其中一个文件调用的库只支持 32 位。另外两个 .py 文件使用的库都兼容 32 位和 64 位。它们看起来像这样:

fileA.py
        -- calls fileB.py (library is only 32 bit compatible)
        -- also calls function in fileC.py (libraries are both 32 and 64 bit compatible)

现在,我在fileC.py中遇到了一个内存错误,如果我能使用64位版本的python来解决这个问题,那就好了。然而,如果我这样做,我会在执行fileB.py时遇到错误,因为它有一个32位库,与64位的python不兼容(32位库是ArcPy)。出现内存错误的库是pandas,由于32位系统无法读取大于2GB的数据框架,所以才会出现内存错误。
有没有办法让fileB.py使用32位解释器,而fileC.py使用64位解释器?要记住,这两个文件都是从fileA.py调用的。

4
为什么你不想使用64位的ArcPy? - Ignacio Vazquez-Abrams
我很愿意!但是我的安装程序只有32位的arcpy。有没有地方可以获取64位版本? - user308827
你可以使用subprocess指定要使用哪个解释器来调用脚本。 - Padraic Cunningham
1个回答

2
据我所知,在同一进程中无法混合使用32位和64位代码。
您需要在ArcPy(文件B)周围编写可执行的包装器,并使用32位解释器作为单独的进程使用subprocess执行它。可执行的ArcPy包装器将需要以序列化格式(如JSON)返回其处理结果。
另一种选择是multiprocessing。您可以使用set_executable()函数来使用32位解释器。此方法提供了更好的IPC机制,以与子进程通信。
在这两种情况下,您最终都会派生出一个子进程。如果需要多次调用ArcPy,则可以将包装器编写为长时间运行的子进程并使用multiprocessing。
话虽如此,请自己方便起见安装64位版本的ArcPy - 如果可行的话。即使无法删除32位版本,也请在备用位置安装64位版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接