Python 这是否可能:在源代码和相关文件保留在网络驱动器中的同时,将虚拟环境克隆到每个用户的笔记本电脑上

Python 这是否可能:在源代码和相关文件保留在网络驱动器中的同时,将虚拟环境克隆到每个用户的笔记本电脑上,python,excel,vba,batch-file,python-venv,Python,Excel,Vba,Batch File,Python Venv,我编写了一个model.py脚本,它接收一个csv文件,运行一系列计算,然后将数据输出到Dashboard.xlsm文件中。所有这些文件都位于共享网络驱动器的同一文件夹中。这个.py脚本需要能够通过单击xlsm文件中的按钮来运行。为了进行设置,我编写了一个简单的VBA宏(链接到前面提到的按钮),它运行一个.bat文件。此.bat文件包含shell命令,用于在与我的文件相同的文件夹中创建虚拟环境,然后在此venv中运行我的.py脚本 但是,激活此venv需要很长时间(约1分钟)。如果我在本地文件夹

我编写了一个model.py脚本,它接收一个csv文件,运行一系列计算,然后将数据输出到Dashboard.xlsm文件中。所有这些文件都位于共享网络驱动器的同一文件夹中。这个.py脚本需要能够通过单击xlsm文件中的按钮来运行。为了进行设置,我编写了一个简单的VBA宏(链接到前面提到的按钮),它运行一个.bat文件。此.bat文件包含shell命令,用于在与我的文件相同的文件夹中创建虚拟环境,然后在此venv中运行我的.py脚本

但是,激活此venv需要很长时间(约1分钟)。如果我在本地文件夹中设置一个venv,我相信它会大大加快运行速度

顶级问题:我当前的设置是否是每个用户能够从excel中运行我的model.py文件的最佳方式,如果不是,有什么替代方案

中级问题:在每个用户的笔记本电脑上克隆一个venv,是否是加快代码运行速度的方法,如果不是,我还可以尝试做什么

特定于代码的问题:创建克隆的venv并确保每个用户从其本地venv中运行my model.py文件的最佳方法是什么

我对最重要问题的回答是:

过去两周的大部分时间里,我都在寻找替代方案。我曾尝试将.py文件转换为.exe文件,但我自己和我的同事都无法使可执行文件正常运行(我们尝试使用Pyinstaller和Py2exe)

然后我研究了虚拟环境,通过大量的尝试和错误,最终得到了一个可以工作的原型(但现在只为我工作)

我对中级问题的答复如下:

老实说,我不知道,也不确定用谷歌搜索什么才能找到答案

我对具体问题的答复是:

我想我可以做以下事情(希望)来加速这个过程:

  • 我不会将venv保存在网络文件夹中,而是保存/创建n个版本的venv,每个用户的笔记本电脑上都有一个版本(在他们不会修改的文件夹中)
  • 我创建n.bat文件,每个用户的特定路径信息对应一个。这是一个文件,它在运行时创建venv并运行python脚本
  • 在我的简单VBA宏中,我检查哪个用户正在使用xlsm文件,并相应地激活正确的.bat文件
以下是我到目前为止编写的代码:

调用bat文件的VBA脚本
子运行_模型()
将folderPath设置为字符串
将命令设置为字符串
ActiveSheet.EnableCalculation=False
ActiveSheet.EnableCalculation=True
ActiveWorkbook.save
folderPath=Application.active工作簿.Path
shellCommand=folderPath&“\”和“用户名在这里。bat”
调用Shell(shellCommand,vbNormalFocus)
端接头
设置venv并运行py脚本的bat文件 python脚本 执行这些操作,然后输出到dashboard.xlsm

最后的一些细节:

  • 没有人拥有管理员权限
  • 每个人都通过anaconda安装了python
  • 我曾尝试独立安装python,但无法使其正常运行(因此只能使用Anaconda发行版)
  • 是的,我必须使用Excel作为输入/输出文件
  • 高层评论:

    < >我想用C或C++用GCC编译一个DLL,Excel VBA可以很容易地进行接口。 如果您需要/想要使用python,那么在xlsm文件打开时,您会遇到写入xlsm文件的问题。因此,python脚本必须从保存结果的工作簿以外的工作簿中启动。但这样一来,脚本的快捷方式也同样好

    IMO的最佳选择是让model.py始终运行,监视dir并在添加或修改新文件时自动更新xlsm。这可能需要在添加csv文件时制作一本新书。您可以将日期/时间添加到文件名中。这也意味着没有人需要他们的本地机器设置来运行您的脚本

    中级评论:

    激活你的venv不应该太慢。这将只是第一次显示设置venv。因此,除非让venv按照每个用户设置,否则我会接受冲击,因为这是最稳健的方法

    如果大多数人只会使用你的脚本一次,或者因为初始化程序太慢而在一次使用后被推迟,那么你需要更好的东西。如果您的IT部门同意,另一种方法是在下次登录时在每个人的计算机上运行安装程序。或者用一个链接给人们发电子邮件,这将启动一个后台流程,以便第一次进行设置

    低级评论:


    关键是不要每次运行脚本时都运行
    pip install
    。那太慢了。您的venv是否已设置。只需在运行pip安装之前检查venv dir是否存在

    您需要制作虚拟环境吗?
    如果所有要求都在本地计算机上,那么在创建.exe时从python路径调用py文件

    ,我发现如果不从cmd窗口运行,您不会得到错误反馈。此外,如果您正在执行基于Excel的操作,有时库无法正确复制。我发现,在构建之后,有时需要进入lib/xlwt并从自己的Python目录复制ExcelFormulaLexer.pyc和ExcelFormulaParser.pyc。无需创建n个特定于用户的
    .bat
    文件-只需传递一个带有用户名的参数,以便根据需要进行自定义。使维护变得非常容易创建venv确保无论我的同事如何处理他们自己的python发行版,程序都能运行。这将减少今后可能出现的问题。
    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