这可能吗:将虚拟环境克隆到每个用户的笔记本电脑,同时源代码和相关文件保留在网络驱动器中
Is this possible: Cloning virtual environments to each users laptops while source code and related files remain in a network drive
我编写了一个 model.py 脚本,它接受一个 csv 文件,运行 进行一系列计算,然后将数据输出到我的 Dashboard.xlsm 文件中。所有这些文件都在共享网络驱动器的同一个文件夹中。通过单击 xlsm 文件中的按钮,此 .py 脚本需要能够 运行。为了进行设置,我编写了一个简单的 VBA 宏(链接到上述按钮),其中 运行 是一个 .bat 文件。此 .bat 文件包含 shell 命令以在与我的文件相同的文件夹中创建虚拟环境,然后 运行 我的 .py 脚本在此 venv 中。
但是,激活这个 venv 需要很长时间(~ 1 分钟)。相反,如果我在本地文件夹中设置一个 venv,我相信它会大大加快 运行 时间。
顶级问题: 我当前的设置是否是每个用户能够从 [=84] 中 运行 我的 model.py 文件的最佳方式=],如果不能,还有哪些替代方案?
中级问题: 正在克隆一个 venv,每个用户笔记本电脑上一个,加快我的代码的 运行 时间的方法,如果不是,怎么办我还可以试试吗?
代码特定问题:创建克隆 venv 的最佳方法是什么,并确保每个用户都将 运行 我的 model.py 文件从他们自己的文件中获取本地 venv?
我对顶级问题的回答:
过去 2 周的大部分时间我都在研究替代方案。我已经尝试将我的 .py 文件转换为 .exe,但我自己和我的同事都无法将可执行文件正确地获取到 运行(我们尝试使用 Pyinstaller 和 Py2exe)。
然后我研究了虚拟环境,经过大量的反复试验,终于得到了一个可以工作的原型(但现在只是为我工作)。
我对中级问题的回答:
老实说,我不知道也不确定要 google 才能找到答案。
我对具体问题的回答:
我想我可以做以下事情来(希望)加快这个过程:
- 我不会将 venv 保存在网络文件夹中,而是 save/create n 个版本的 venv,每个用户的笔记本电脑上一个(在他们不会修改的文件夹中)。
- 我创建了 n 个 .bat 文件,一个用于每个用户的特定路径信息。这是在 运行 时创建 venv 和 运行s python 脚本的文件。
- 在我的简单 VBA 宏中,我检查哪个用户正在使用 xlsm 文件,并相应地激活正确的 .bat 文件。
这是我目前编写的代码:
调用bat文件的VBA脚本
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
设置 venv 的 bat 文件和 运行s 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
一些最后的细节:
- 没有人拥有管理员权限,
- 每个人都通过 anaconda 安装了 python,
- 我尝试独立安装 python,但无法使其正常运行(因此退回到 Anaconda 发行版),
- 是的,我必须使用 Excel 作为两个 input/output 文件。
顶级评论:
我想说使用 C 或 C++ 和 gcc 来编译一个 DLL,excel vba 可以接口会更干净。
如果您需要 to/want 才能使用 python,那么您在打开 xlsm 文件时会遇到写入问题。因此 python 脚本必须从保存结果的工作簿中启动。但是脚本的快捷方式也一样好。
IMO 的最佳选择是让您的 model.py 始终 运行ning,监视目录并在添加新文件或修改文件时自动更新 xlsm。这可能需要在添加 csv 文件时制作一本新书。您可以将 date/time 添加到文件名中。这也意味着没有人需要他们的本地机器设置来 运行 您的脚本。
中级评论:
激活您的 venv 应该不会很慢。它只会显示第一次设置 venv。所以我会接受打击,除非让每个用户设置 venv,因为这是最可靠的方法。
如果大多数人只会使用您的脚本一次,或者由于初始化例程缓慢而在使用一次后就被推迟,那么您需要更好的东西。如果您的 IT 部门同意,另一种方法是在下次登录时让安装程序在每个人的计算机上 运行。或者用 link 向人们发送电子邮件,这将启动后台进程以首次进行设置。
低级评论:
关键是不要 运行 pip install
每次 运行 脚本。那很慢。您的 venv 是否已设置。只需在 运行ning pip 安装之前检查 venv 目录是否存在。
你需要制作虚拟环境吗?
如果所有要求都在本地机器上,请从 python 路径
调用 py 文件
我编写了一个 model.py 脚本,它接受一个 csv 文件,运行 进行一系列计算,然后将数据输出到我的 Dashboard.xlsm 文件中。所有这些文件都在共享网络驱动器的同一个文件夹中。通过单击 xlsm 文件中的按钮,此 .py 脚本需要能够 运行。为了进行设置,我编写了一个简单的 VBA 宏(链接到上述按钮),其中 运行 是一个 .bat 文件。此 .bat 文件包含 shell 命令以在与我的文件相同的文件夹中创建虚拟环境,然后 运行 我的 .py 脚本在此 venv 中。
但是,激活这个 venv 需要很长时间(~ 1 分钟)。相反,如果我在本地文件夹中设置一个 venv,我相信它会大大加快 运行 时间。
顶级问题: 我当前的设置是否是每个用户能够从 [=84] 中 运行 我的 model.py 文件的最佳方式=],如果不能,还有哪些替代方案?
中级问题: 正在克隆一个 venv,每个用户笔记本电脑上一个,加快我的代码的 运行 时间的方法,如果不是,怎么办我还可以试试吗?
代码特定问题:创建克隆 venv 的最佳方法是什么,并确保每个用户都将 运行 我的 model.py 文件从他们自己的文件中获取本地 venv?
我对顶级问题的回答:
过去 2 周的大部分时间我都在研究替代方案。我已经尝试将我的 .py 文件转换为 .exe,但我自己和我的同事都无法将可执行文件正确地获取到 运行(我们尝试使用 Pyinstaller 和 Py2exe)。
然后我研究了虚拟环境,经过大量的反复试验,终于得到了一个可以工作的原型(但现在只是为我工作)。
我对中级问题的回答:
老实说,我不知道也不确定要 google 才能找到答案。
我对具体问题的回答:
我想我可以做以下事情来(希望)加快这个过程:
- 我不会将 venv 保存在网络文件夹中,而是 save/create n 个版本的 venv,每个用户的笔记本电脑上一个(在他们不会修改的文件夹中)。
- 我创建了 n 个 .bat 文件,一个用于每个用户的特定路径信息。这是在 运行 时创建 venv 和 运行s python 脚本的文件。
- 在我的简单 VBA 宏中,我检查哪个用户正在使用 xlsm 文件,并相应地激活正确的 .bat 文件。
这是我目前编写的代码:
调用bat文件的VBA脚本
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
设置 venv 的 bat 文件和 运行s 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
一些最后的细节:
- 没有人拥有管理员权限,
- 每个人都通过 anaconda 安装了 python,
- 我尝试独立安装 python,但无法使其正常运行(因此退回到 Anaconda 发行版),
- 是的,我必须使用 Excel 作为两个 input/output 文件。
顶级评论:
我想说使用 C 或 C++ 和 gcc 来编译一个 DLL,excel vba 可以接口会更干净。
如果您需要 to/want 才能使用 python,那么您在打开 xlsm 文件时会遇到写入问题。因此 python 脚本必须从保存结果的工作簿中启动。但是脚本的快捷方式也一样好。
IMO 的最佳选择是让您的 model.py 始终 运行ning,监视目录并在添加新文件或修改文件时自动更新 xlsm。这可能需要在添加 csv 文件时制作一本新书。您可以将 date/time 添加到文件名中。这也意味着没有人需要他们的本地机器设置来 运行 您的脚本。
中级评论:
激活您的 venv 应该不会很慢。它只会显示第一次设置 venv。所以我会接受打击,除非让每个用户设置 venv,因为这是最可靠的方法。
如果大多数人只会使用您的脚本一次,或者由于初始化例程缓慢而在使用一次后就被推迟,那么您需要更好的东西。如果您的 IT 部门同意,另一种方法是在下次登录时让安装程序在每个人的计算机上 运行。或者用 link 向人们发送电子邮件,这将启动后台进程以首次进行设置。
低级评论:
关键是不要 运行 pip install
每次 运行 脚本。那很慢。您的 venv 是否已设置。只需在 运行ning pip 安装之前检查 venv 目录是否存在。
你需要制作虚拟环境吗? 如果所有要求都在本地机器上,请从 python 路径
调用 py 文件