激活 virtualenv 然后运行另一个 Python 脚本的 Python 脚本?

Posted

技术标签:

【中文标题】激活 virtualenv 然后运行另一个 Python 脚本的 Python 脚本?【英文标题】:A Python script that activates the virtualenv and then runs another Python script? 【发布时间】:2015-09-04 19:30:00 【问题描述】:

在 Windows Vista 上,我需要一个启动 activate(以激活 virtualenv)脚本的脚本:

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

然后,在虚拟环境中,启动到文件夹中的manage.py runserver

C:\Users\Admin\Desktop\helloworld\

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

【问题讨论】:

【参考方案1】:

您可以激活您的 virtualenv,然后使用 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"

然后你可以运行这个bat文件(只需双击)来启动服务器

【讨论】:

仅供参考:这也适用于使用 virtualenvwrapper(-win),例如:workon myenv & cd c:\AppPath & python my_app.py 投反对票。我们的代码看起来像这样,这可能要归功于不久前有人在这里阅读的这个答案:python->bat->python->bat->python->bat。无法调试。请在您的代码中仅使用 python。 python里面的.bat是魔鬼 根据我自己的经验,激活虚拟环境。默认情况下不会从中运行 Python。我仍然必须指定我正在运行 venv 的 Python iut 我不得不做更多的工作才能使用 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" 我不得不在 Windows 10 命令控制台上使用双 &&。【参考方案2】:

runserver.bat:

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

【讨论】:

这似乎可以运行,但是当使用它激活venv,然后在其中运行sphinx-build -b html source build 时,它无法识别文件中的任何更改:@echo on CALL venv\Scripts\activate.bat sphinx-build -b html source build 非常感谢。【参考方案3】:

如果你想直接调用 virtualenv'ed Python,你可以这样做:

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

仔细检查您的 virtualenv 文件夹上的 python.exe 位置 - 不记得它是怎么想出来的。此 Python 将自身与 virtualenv 关联,并默认使用其 site-packages

【讨论】:

路径应该是bin/python.exe 请注意,特别是在 Windows 上,此方法不会看到在 activate.bat 脚本中对环境变量所做的任何更改 指定和激活 Anaconda 虚拟环境的想法相同。将以下代码另存为 .cmd 文件。 'C:\Users\Jesus\Miniconda3\envs\MyEnvornment01\python.exe MyAPP.py'【参考方案4】:

我在 Windows 上使用 Anaconda 3 和 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 路径\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【参考方案5】:

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

但首先,这对我有用:

    打开记事本 粘贴这个:
@echo off
CALL c:\1\env\Scripts\activate.bat
python c:\1\app.py runserver
    另存为what.bat 双击该文件运行

通常:在您的 python 项目下找到“activate.bat”很重要。在这种情况下,我的项目位于 c:\1 和相对目录 env\Scripts 下的 activate.bat 中,这显然可能取决于情况或随时间而变化。这使得通用脚本:

@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 就可以了。

【讨论】:

【参考方案6】:

您可以使用插入符号 (^) 而不是使用字符串,如以下问题所述:Long commands split over multiple lines in Windows Vista batch (.bat) file

例如

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 中的有用模式。

【讨论】:

【参考方案7】:

对我来说,使用以下代码:(script_file.bat)

@echo 关闭

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

C:/Users/apo1979/Anaconda3/envs/PyPWBI/python.exe "d:/.APO_OneDrive/script_SpeedTest.py" 运行服务器

暂停

【讨论】:

这增加了什么其他答案中尚未涵盖的内容?

以上是关于激活 virtualenv 然后运行另一个 Python 脚本的 Python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

第二天返回项目时重新激活virtualenv

Linux Mint 20.2 和 Virtualenv:激活命令忽略我

如何将Python virtualenv移至其他系统(计算机)并使用站点软件包中的软件包

sh 在Ubuntu 12.04上将Pygame 1.9.1安装到Python2.7 virtualenv中的脚本。确保在运行thi之前激活了virtualenv

如何在 Linux 中激活 virtualenv?

无法在 Windows 的 GIT bash mingw32 中激活 virtualenv