我试图在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执行此代码时,命令提示符出现几秒钟,然后关闭,其余代码从不执行。修复此代码的任何帮助将不胜感激。
答案 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替代方案或上述激活后脚本中。