Возможно ли это: клонирование виртуальных сред на ноутбуки каждого пользователя, в то время как исходный код и связанные файлы остаются на сетевом диске

Я написал сценарий model.py, который принимает CSV-файл, выполняет ряд вычислений, а затем выводит данные в мой файл Dashboard.xlsm. Все эти файлы находятся в одной папке на общем сетевом диске. Этот сценарий .py должен запускаться нажатием кнопки в файле xlsm. Чтобы настроить это, я написал простой макрос VBA (связанный с вышеупомянутой кнопкой), который запускает файл .bat. Этот файл .bat содержит команды оболочки для создания виртуальной среды в той же папке, что и мои файлы, а затем запускает мой сценарий .py в этом venv.

Однако активация этого venv занимает много времени (~ 1 мин). Если вместо этого я настрою venv в локальной папке, я полагаю, что это значительно ускорит время выполнения.

Вопрос верхнего уровня: Является ли моя текущая настройка лучшим способом для каждого пользователя, чтобы он мог запускать мой файл model.py из Excel, если нет, какие альтернативы возможны?

Вопрос среднего уровня: Является ли клонирование venv, по одному на ноутбуке каждого пользователя, способом ускорить выполнение моего кода, если нет, что еще я могу попытаться сделать?

Конкретный вопрос по коду: Как лучше всего создать клонированный venv и убедиться, что каждый пользователь будет запускать мой файл model.py из своего локального venv?

Мой ответ на вопрос верхнего уровня:

Я провел большую часть последних 2 недель, изучая альтернативы. Я пытался преобразовать свой файл .py в .exe, но ни я, ни мой коллега не смогли заставить исполняемый файл работать должным образом (мы пытались использовать Pyinstaller и Py2exe).

Затем я изучил виртуальные среды и, путем множества проб и ошибок, наконец, получил работающий прототип (но пока он работает только на меня).

Мой ответ на вопрос среднего уровня:

Честно говоря, я не знаю и не уверен, что даже гуглить, чтобы найти ответ на этот вопрос.

Мой ответ на конкретный вопрос:

Я подумал, что могу сделать следующее, чтобы (надеюсь) ускорить процесс:

  • Вместо сохранения 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"
'''

скрипт питона

import USER_DEFINED_MODULE #this .py file contains functions I use later on in my script
import other_stuff

делать что-то, а затем выводить в панель инструментов.xlsm

Некоторые заключительные детали:

  1. ни у кого нет прав администратора,
  2. у всех установлен питон через анаконду,
  3. Я попытался установить python самостоятельно, но мне не удалось заставить его работать (таким образом, откат к дистрибутиву Anaconda),
  4. Да, я должен использовать Excel как файлы ввода/вывода.

Когда я создаю .exe, я обнаружил, что вы не получите сообщения об ошибках, если вы не работаете из окна cmd. Кроме того, если вы делаете что-то на основе Excel, иногда библиотеки копируются неправильно. Я обнаружил, что после сборки иногда вам нужно зайти в lib/xlwt и скопировать ExcelFormulaLexer.pyc и ExcelFormulaParser.pyc из вашего собственного каталога Python.

mauve 28.05.2019 16:02

Нет необходимости создавать файлы н для конкретных пользователей .bat — просто передайте им параметр с именем пользователя, чтобы настроить его по мере необходимости. Облегчает обслуживание ТОНН

FreeMan 28.05.2019 16:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Комментарии верхнего уровня:

Я бы сказал, что использование C или C++ с gcc для компиляции DLL, с которой может работать интерфейс excel vba, было бы намного чище.

Если вам нужно/хотите использовать python, у вас возникнет проблема с записью в файл xlsm, пока он открыт. Таким образом, скрипт Python должен запускаться из другой книги, отличной от той, в которой хранятся результаты. Но тогда ярлык к сценарию был бы ничуть не хуже.

Лучший вариант IMO - всегда запускать ваш model.py, отслеживать каталог и автоматически обновлять xlsm при добавлении новых файлов или изменении файлов. Это, вероятно, требует создания новой книги всякий раз, когда добавляются файлы csv. Вы можете добавить дату/время к именам файлов. Это также означает, что никому не нужна настройка локального компьютера для запуска вашего скрипта.

Комментарии среднего уровня:

Активация вашего venv не должна быть медленной. Это будет показано при первой настройке venv. Так что я бы принял удар, если бы не оставил venv для настройки для каждого пользователя, поскольку это самый надежный метод.

Если большинство людей воспользуются вашим скриптом только один раз или отложат работу после первого использования из-за медленной процедуры инициализации, то вам нужно что-то получше. Альтернативой является запуск установщика на всех компьютерах при следующем входе в систему, если ваш ИТ-отдел согласен. Или по электронной почте людям со ссылкой, которая запустит фоновый процесс, чтобы настроить вещи в первый раз.

Комментарии низкого уровня:

Ключ в том, чтобы не запускать pip install каждый раз, когда вы запускаете скрипт. Это медленно. Либо ваш venv настроен, либо нет. Просто проверьте, существует ли каталог venv перед запуском установки pip.

Вам нужно сделать виртуальную среду? если все требования находятся на локальной машине, вызовите файл py из пути python

Создание venv гарантирует, что программа будет работать независимо от того, что мои коллеги сделают со своим собственным дистрибутивом Python. Это уменьшит возможные проблемы в будущем.

Jr Analyst 28.05.2019 18:54

Другие вопросы по теме