一个激活虚拟环境并运行另一个Python脚本的Python脚本?

73

在Windows Vista上,我需要一个脚本来启动activate(用于激活 virtualenv)脚本的位置:

C:\Users\Admin\Desktop\venv\Scripts\

后来,在虚拟环境中,可以在文件夹中运行manage.py runserver命令:

C:\Users\Admin\Desktop\helloworld\

我该怎么做?我应该使用哪些模块?

7个回答

112
你可以激活你的虚拟环境,然后使用.bat文件启动服务器。 将这个脚本复制到一个文件中,并将其保存为.bat扩展名(例如runserver.bat)。
@echo off
cmd /k "cd /d C:\Users\Admin\Desktop\venv\Scripts & activate & cd /d    C:\Users\Admin\Desktop\helloworld & python manage.py runserver"

然后您只需运行此批处理文件(双击即可)即可启动服务器


5
请注意:使用virtualenvwrapper(-win)时,也适用此方法,例如:workon myenv & cd c:\AppPath & python my_app.py。该命令可以进入虚拟环境并执行指定路径下的Python程序。 - tutuDajuju
2
被踩了。我们的代码看起来像这样,可能是由于此前某人在这里阅读了这个答案:python->bat->python->bat->python->bat。无法调试。请在您的代码中仅使用Python。在Python中使用.bat就像是与魔鬼交易。 - Gulzar
根据我的经验,激活虚拟环境并不会默认运行其中的Python。我仍然需要指定我是在venv中运行Python。 - hyankov
我必须做更多的工作来正确导入venv和-m标志的模块。希望这能帮助到某些人:cmd /k "cd /d C:\Users\User\repos\Project\venv\Scripts\ & activate & cd /d "C:\Users\User\repos\Project" & C:\Users\User\repos\Project\venv\Scripts\python.exe -m MyProject.main MyProject/main.py" - Slate
我必须在Windows 10命令控制台上使用双和符号(&&)。 - Robert Simpson

52

runserver.bat:

 CALL [your path]\Scripts\activate.bat
 python manage.py runserver

这段代码似乎可以运行,但是当用它来激活一个venv,然后在其中运行sphinx-build -b html source build时,它无法识别文件中的任何更改:CALL venv\Scripts\activate.bat sphinx-build -b html source build``` - Marie. P.

13

如果你想直接调用虚拟环境中的Python,可以像这样操作:

 C:\Users\Admin\Desktop\venv\Scripts\bin\python.exe manage.py runserver

在您的虚拟环境文件夹中仔细检查python.exe的位置——我不记得它是怎么样的。该Python将自己与虚拟环境关联,并默认使用其site-packages


路径应该是 bin/python.exe。 - hd1
7
请注意,特别是在Windows上,这种方法无法看到在activate.bat脚本中进行的环境变量更改。 - phil_20686
1
同样的想法用于指定和激活Anaconda虚拟环境。将以下代码保存为.cmd文件。'C:\Users\Jesus\Miniconda3\envs\MyEnvornment01\python.exe MyAPP.py' - Albert H

5

我正在使用Anaconda 3和Windows上的Python 3.7.6。必须在我的.bat文件中执行以下操作:

CALL path\to\base\virtual\environment\Scripts\activate.bat path\to\your\virtual\environment [path\to\your\virtual\environment]python.exe path\to\your\script\yoursript.py

如果没有activate.bat,什么都不起作用。我遇到了有关mkl-server的错误。该错误在此处描述:https://github.com/numpy/numpy/issues/15523。人们在那里抱怨conda出现故障,即仅调用python.exe yoursript.py无法正常工作。


以下是我使用myenv虚拟环境运行my_script.py的方法:首先运行call C:\ProgramData\Anaconda3\Scripts\activate.bat myenv,然后运行python C:\MyProject\my_script.py - Garland Pope

3

对我来说,以上方法不起作用,因此我将提供一个更一般的答案。

但首先,具体来说,以下方法适用于我的情况:

  1. 打开记事本
  2. 粘贴以下内容:
@echo off
CALL c:\1\env\Scripts\activate.bat
python c:\1\app.py runserver
  1. 保存为whatever.bat
  2. 双击此文件运行

通常来说:将"activate.bat"定位在你的Python项目下很重要。在我这个例子中,我的项目在c:\1目录下,而"activate.bat"则在相对目录env\Scripts下,这可能会因情况而异或随时间而改变。因此,一般的脚本如下:

@echo off
CALL [Your python project path]\[the relative path of your activate.bat]\activate.bat
python [Your python project path]\[your python filename].py runserver

在我的情况下,项目路径是:c:\1 相对路径为:env\Scripts Python文件名为:app

当我创建虚拟环境时,env文件相对于我的Python文件被放置。假设您的情况与问题中的情况相似,则脚本中的调用行将更改为: CALL [您的activate.bat位置]\activate.bat

即在这种情况下,以下内容应该有效:

@echo off
CALL C:\Users\Admin\Desktop\venv\Scripts\activate.bat
python C:\Users\Admin\Desktop\helloworld\manage.py runserver

提示:我刚发现Python将我的桌面作为工作目录,因此将工作目录更改为Python路径可能是一个好主意。在我的情况下,在@echo off下添加cd\1即可解决问题。


2

与其使用字符串,你可以使用插入符号(^),就像这个问题描述的一样:在 Windows Vista 批处理(.bat)文件中将长命令拆分成多行

例如:

cmd /k cd path/to/activate ^
activate.bat
pip uninstall --yes package ^
pip install git+https://git.server.com/user/project@remote/branch ^
deactivate

会打开一个venv并卸载,重装 Git 存储库的一个分支。这是自动化部署代码到 venv 的有用模式。


0

对我来说,与这段代码一起工作:(script_file.bat)

@echo off

CALL C:\Users\apo1979\Anaconda3\Scripts\activate.bat PyPWBI

C:/Users/apo1979/Anaconda3/envs/PyPWBI/python.exe "d:/.APO_OneDrive/script_SpeedTest.py" runserver

pause


这个回答提供了其他回答中没有涵盖的内容是什么? - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接