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

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

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

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

C:\Users\Admin\Desktop\helloworld\

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

【问题讨论】:

    标签: python windows shell command virtualenv


    【解决方案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】:

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

    但首先,这对我有用:

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

    通常:在您的 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" 运行服务器

        暂停

        【讨论】:

        • 这增加了什么其他答案中尚未涵盖的内容?
        猜你喜欢
        • 1970-01-01
        • 2018-08-02
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        相关资源
        最近更新 更多