2015-10-17 4 views
6

У меня есть 3 файла .py для проекта, который я запускаю на машине Windows. Один из этих файлов вызывает библиотеку, которая имеет только 32 бит. Другие 2 .py-файлы имеют библиотеки, совместимые с 32 и 64 бит. Они выглядят так:Изменить интерпретатор python mid-script

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 битную версию питона. Однако, если я это сделаю, я столкнулся с ошибкой при выполнении fileB.py, так как у нее есть 32-битная библиотека, которая не хорошо разбирается в 64-битном питоне (32-битная библиотека - это ArcPy). Библиотека с ошибкой памяти - это pandas, ошибка памяти происходит, поскольку pandas не может читать данные, размером более 2 ГБ для 32-битной системы.

Есть ли способ использовать 32-битный интерпретатор для fileB.py и 64 бит для fileC.py. Помните, что оба вызываются из файла file.py.

+4

Почему вы не хотите использовать 64-битный ArcPy? –

+0

Я бы с удовольствием! но моя установка имеет 32-разрядную дугу. Есть ли место, где я могу получить 64-битную версию? – user308827

+0

Вы можете вызвать сценарий с подпроцессом, указав, какой интерпретатор использовать –

ответ

2

Там нет способа смешивать и 64 битный код в том же процессе, насколько мне известно.

Вам необходимо написать исполняемую обертку вокруг ArcPy (fileB) и выполнить ее как отдельный процесс с использованием subprocess с использованием 32-битного интерпретатора. Исполняемая оболочка ArcPy должна будет вернуть результат обработки в сериализованном формате (например, JSON).

Другая альтернатива multiprocessing. Вы можете использовать функцию set_executable() для использования 32-разрядного интерпретатора. Этот метод обеспечивает более удобный механизм IPC для связи с дочерним процессом.

В обоих случаях вы закончите разворачивать дочерний процесс. Если ArcPy нужно вызывать в несколько раз, вы можете написать оболочку, чтобы она выполняла длительный процесс и выполняла многопроцессорную обработку.

При этом сделайте себе одолжение и установите 64-разрядную версию ArcPy - если это возможно. Даже если вы не можете удалить 32-битную версию, установите 64-разрядную версию в другом месте.

Смежные вопросы