将少量 python 嵌入到批处理脚本中
Embedding small amounts of python into batch scripts
我有一个主要用 python 编写的应用程序。我希望制作并使用包含所有必需包的虚拟环境。在 Linux 中,这很容易。
这是我的 shell 脚本来设置虚拟环境
#!/bin/bash
#It is best practice to create virtual environments for projects that require many packages installed
python3 -m venv ./python_environment #Creates a new virtual environmnet in PWD
source ./python_environment/bin/activate #swithces to our new virtual environment
#Now we can install the needed packages using pip
python3 -m pip install --upgrade pip
pip install numpy opencv-python pillow imutils
这是我启动应用程序的脚本
#!/bin/bash
#This is a wrapper that launches program
source ./python_environment/bin/activate # Uses custom python envionment in PWD
PYWRAP=$(cat <<EOF
import tagging
import tagging.tagger_controller
tagging.tagger_controller.start()
EOF
)#BASH Variable to pass to python
python3 -c "$PYWRAP" #Executes the python wrapper
当我尝试为 Windows 执行此操作时,脚本并不那么优雅。
setup.bat 运行,但我注意到有些包没有安装
python -m venv python_environment
python_environment\Scripts\activate.bat
python -m pip install --upgrade pip
pip install numpy opencv-python pillow imutils
launcher.bat 只激活环境,不启动应用程序。
您可能还注意到此脚本调用了一个 .py 文件,这不太理想,但我不
知道如何将几行 python 嵌入到批处理文件中,就像我在 Linux.
中所做的那样
python_environment\Scripts\activate.bat
python main.py
请告诉我你的想法...
这不是一个完整的答案,但我想向您展示如何将 Python 嵌入到 Windows 批处理文件中。请注意,这不是原创的——我在将近 20 年前(2003 年)在互联网上的某个地方找到了它。
@echo off
rem = """
rem Do any custom setup like setting environment variables etc if required here ...
python -x "%~f0" %*
goto endofPython """
# Your python code goes here ..
if __name__ == "__main__":
print("Hello World from Python")
rem = """
:endofPython """
我的解决方案是以上两个答案的组合。
@echo off
rem = """
rem Do any custom setup like setting environment variables etc if required here ...
call python_environment\Scripts\activate.bat
call python -x "%~f0" %*
goto endofPython """
# Your python code goes here ..
import tagging
import tagging.tagger_controller
tagging.tagger_controller.start()
rem = """
:endofPython """
您会注意到这与@martineau 发布的解决方案非常相似
然而,一个关键的区别是 call
命令用于第 5 和第 7 行
(感谢@aschipfl 的洞察力)。这使得批处理脚本可以调用 python 代码,而不是在调用后立即关闭应用程序。
感谢您的帮助,祝您好运!!!
KopiousKarp
我有一个主要用 python 编写的应用程序。我希望制作并使用包含所有必需包的虚拟环境。在 Linux 中,这很容易。 这是我的 shell 脚本来设置虚拟环境
#!/bin/bash
#It is best practice to create virtual environments for projects that require many packages installed
python3 -m venv ./python_environment #Creates a new virtual environmnet in PWD
source ./python_environment/bin/activate #swithces to our new virtual environment
#Now we can install the needed packages using pip
python3 -m pip install --upgrade pip
pip install numpy opencv-python pillow imutils
这是我启动应用程序的脚本
#!/bin/bash
#This is a wrapper that launches program
source ./python_environment/bin/activate # Uses custom python envionment in PWD
PYWRAP=$(cat <<EOF
import tagging
import tagging.tagger_controller
tagging.tagger_controller.start()
EOF
)#BASH Variable to pass to python
python3 -c "$PYWRAP" #Executes the python wrapper
当我尝试为 Windows 执行此操作时,脚本并不那么优雅。 setup.bat 运行,但我注意到有些包没有安装
python -m venv python_environment
python_environment\Scripts\activate.bat
python -m pip install --upgrade pip
pip install numpy opencv-python pillow imutils
launcher.bat 只激活环境,不启动应用程序。 您可能还注意到此脚本调用了一个 .py 文件,这不太理想,但我不 知道如何将几行 python 嵌入到批处理文件中,就像我在 Linux.
中所做的那样python_environment\Scripts\activate.bat
python main.py
请告诉我你的想法...
这不是一个完整的答案,但我想向您展示如何将 Python 嵌入到 Windows 批处理文件中。请注意,这不是原创的——我在将近 20 年前(2003 年)在互联网上的某个地方找到了它。
@echo off
rem = """
rem Do any custom setup like setting environment variables etc if required here ...
python -x "%~f0" %*
goto endofPython """
# Your python code goes here ..
if __name__ == "__main__":
print("Hello World from Python")
rem = """
:endofPython """
我的解决方案是以上两个答案的组合。
@echo off
rem = """
rem Do any custom setup like setting environment variables etc if required here ...
call python_environment\Scripts\activate.bat
call python -x "%~f0" %*
goto endofPython """
# Your python code goes here ..
import tagging
import tagging.tagger_controller
tagging.tagger_controller.start()
rem = """
:endofPython """
您会注意到这与@martineau 发布的解决方案非常相似
然而,一个关键的区别是 call
命令用于第 5 和第 7 行
(感谢@aschipfl 的洞察力)。这使得批处理脚本可以调用 python 代码,而不是在调用后立即关闭应用程序。
感谢您的帮助,祝您好运!!!
KopiousKarp