如何激活Python虚拟环境并同时执行脚本?

时间:2018-12-20 17:08:18

标签: python python-3.x

我试图在Powershell中自动加载我的Python虚拟环境并同时执行python查询,但是我对此没有任何运气。这是我的代码:

# my_testing_file.py

# Activate the virtual environment
import os
script_directory = os.path.dirname(os.path.abspath(__file__))
activate_this_file = os.path.join(script_directory, 'C:\Temp\Development\Python_scripts\env\Scripts\activate_this.py')

# Start executing the main code
import pypyodbc
from openpyxl.workbook import Workbook

def main():
    cursor = initiate_connection_db()
    unposted_hours_results = retrieve_results_query(cursor)
    ...

if __name__ == "__main__":
    main()

所有代码都在一个文件中,基本上我想在Powershell python my_testing_file.py中进行操作,因此它可以加载虚拟环境并执行其余代码。

从Powershell执行此代码时,命令提示符出现几秒钟,然后关闭,其余代码从不执行。修复此代码的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

正如@dfundako指出的,激活后的脚本可以完成激活虚拟环境并立即执行脚本的技巧,但是,我发现了另一种替代方法,我认为这不是最好的方法,但它执行了我所要执行的操作需要实现。我必须将python脚本及其库打包到一个.exe文件中,因此,一旦用户单击它,该程序就会执行所需的任务。

在虚拟环境中,我执行了一个名为setup.py的文件,将my_testing_file.py生成为.exe:

# Python 3.6.7
# The cx_Freeze library did the trick to pack all the libraries and the script. 
# Put down all the scripts that your 

import sys, os
import openpyxl
import cx_Freeze
import my_testing_file.py
from subprocess import call

base = None

if sys.platform == 'win32':
    base = "Win32GUI"

# my_testing_file is the main script that executes my desired task.
executables = [cx_Freeze.Executable("my_testing_file.py", base=base)]

cx_Freeze.setup(
    name = "Testing Deploy",
options = {"build_exe":
           {"packages":
            ["openpyxl", "subprocess"]
            }
           },
version = "0.01",
description = " Testing executable alternative",
executables = executables
)

我相信使用Docker也可以完成类似的操作,但是我缺乏实现相同目标所需的知识。随时改善此答案,或将代码放置在Docker替代方案或上述激活后脚本中。