Я написал скрипт model.py, который принимает файл csv, выполняет кучу вычислений, а затем выводит данные в мой файл Dashboard.xlsm. Все эти файлы находятся в одной папке на общем сетевом диске. Этот скрипт .py необходимо запустить, нажав кнопку в файле xlsm. Чтобы настроить это, я написал простой макрос VBA (связанный с вышеупомянутой кнопкой), который запускает файл .bat. Этот файл .bat содержит команды оболочки для создания виртуальной среды в той же папке, что и мои файлы, а затем запускает мой сценарий .py в этом venv.
Однако, активация этого венва занимает много времени (~ 1 мин). Если вместо этого я настрою venv в локальной папке, я считаю, что это значительно ускорит время выполнения.
Вопрос верхнего уровня: Является ли моя текущая настройка наилучшим способом для каждого пользователя иметь возможность запускать мой файл model.py из Excel, если нет, какие альтернативы возможны?
Вопрос среднего уровня: Является ли клонирование venv, по одному на ноутбуке каждого пользователя, способом ускорения выполнения моего кода, если нет, что еще я мог бы попытаться сделать?
Вопрос, специфичный для кода: Каков наилучший способ создания клонированного venv и обеспечения того, чтобы каждый пользователь запускал мой файл model.py из своего локального venv?
Мой ответ на вопрос верхнего уровня:
Большую часть последних 2 недель я провел, изучая альтернативы. Я пытался преобразовать мой .py файл в .exe, но ни я, ни мой коллега не смогли заставить исполняемый файл работать должным образом (мы пытались использовать Pyinstaller и Py2exe).
Затем я изучил виртуальные среды и, благодаря множеству проб и ошибок, наконец-то получил работающий прототип (но пока только работающий на меня).
Мой ответ на вопрос среднего уровня:
Честно говоря, я не знаю и не уверен, что даже Google, чтобы найти ответ на этот вопрос.
Мой ответ на конкретный вопрос:
Я думал, что мог бы сделать следующее (надеюсь) ускорить процесс:
- Вместо сохранения venv в сетевой папке, я бы сохранял / создавал n версий venv, по одной на ноутбуке каждого пользователя (в папке, которую они не будут изменять).
- Я создаю n .bat файлов, по одному для каждой конкретной информации о пути. Это файл, который при запуске создает venv и запускает скрипт python.
- В моем простом макросе VBA я проверяю, какой пользователь использует файл xlsm, и соответственно активирую правильный файл .bat.
Вот что я кодировал до сих пор:
Сценарий VBA, который вызывает файл bat
Sub run_model()
Dim folderPath As String
Dim shellCommand As String
ActiveSheet.EnableCalculation = False
ActiveSheet.EnableCalculation = True
ActiveWorkbook.save
folderPath = Application.ActiveWorkbook.Path
shellCommand = folderPath & "\" & "USER_NAME_GOES_HERE.bat"
Call Shell(shellCommand, vbNormalFocus)
End Sub
файл bat, который устанавливает venv и запускает скрипт py
chdir I:\NETWORK_PATH
I:
python -m venv venv/
"./venv/Scripts/activate.bat" & pip install -r ./src/requirements.txt & "./venv/Scripts/activate.bat" & python "./src/MODEL.py"
'''
скрипт Python
import USER_DEFINED_MODULE #this .py file contains functions I use later on in my script
import other_stuff
делать вещи, затем выводить на dashboard.xlsm
Некоторые окончательные данные:
- никто не имеет прав администратора,
- у всех Python установлен через Anaconda,
- Я попытался установить python самостоятельно, но не смог сделать его работоспособным (таким образом, откат к дистрибутиву Anaconda),
- Да, я должен использовать Excel в качестве обоих файлов ввода / вывода.