【问题标题】:Python virtualenv questionsPython virtualenv 问题
【发布时间】:2011-05-30 12:03:14
【问题描述】:

我在 Windows XP 上使用 VirtualEnv。我想知道我的大脑是否正确地缠绕在它周围:

我运行了virtualenv ENV,它创建了C:\WINDOWS\system32\ENV。然后我将PATH 变量更改为包含C:\WINDOWS\system32\ENV\Scripts 而不是C:\Python27\Scripts。然后,我将 Django 签出到 C:\WINDOWS\system32\ENV\Lib\site-packages\django-trunk,更新我的 PYTHON_PATH 变量以指向新的 Django 目录,并继续 easy_install 其他东西(当然进入我的新 C:\WINDOWS\system32\ENV\Lib\site-packages 目录)。

我明白为什么我应该使用 VirtualEnv 以便我可以在同一台机器上运行多个版本的 Django 和其他库,但这是否意味着要在环境之间切换我必须基本上更改我的 PATH 和 PYTHON_PATH 变量?因此,我从开发一个在名为ENV 的环境中使用 Django 1.2 的 Django 项目开始,然后更改我的 PATH 等,以便我可以使用一个名为 ENV2 的环境,它具有 Django 的开发版本?

基本上是这样,还是有更好的方法来自动完成所有这些(我可以在 Python 代码中更新我的路径,但这需要我在我的应用程序中编写特定于机器的代码)?

另外,这个过程与在 Linux 上使用 VirtualEnv 相比如何(我是 Linux 的初学者)。

【问题讨论】:

  • 在 Windows 上激活 virtualenv 时遇到问题?见this answer

标签: python windows linux virtualenv


【解决方案1】:

通常virtualenv 在当前目录中创建环境。除非您出于某种原因打算在 C:\Windows\system32 中创建虚拟环境,否则我会为环境使用不同的目录。

您不需要弄乱路径:使用activate 脚本(在<env>\Scripts 中)确保Python 可执行文件和路径是特定于环境的。完成此操作后,命令提示符会更改以指示环境。然后,您可以调用 easy_install 并且以这种方式安装的任何内容都将安装到此环境中。使用deactivate 将所有内容设置回激活前的状态。

例子:

c:\Temp>virtualenv myenv
New python executable in myenv\Scripts\python.exe
Installing setuptools..................done.
c:\Temp>myenv\Scripts\activate
(myenv) C:\Temp>deactivate
C:\Temp>

请注意,我不需要为 deactivate 指定路径 - activate 会为您执行此操作,因此当激活“Python”时,它将在 virtualenv 中运行 Python,而不是您的系统 Python。 (试试看 - 执行 import sys; sys.prefix,它应该会打印您环境的根目录。)

您可以只激活一个新环境以在环境/项目之间切换,但您需要为activate 指定整个路径,以便它知道要激活哪个环境。您永远不需要明确地弄乱 PATH 或 PYTHONPATH。

如果您使用 Windows Powershell,那么您可以利用 wrapper。在 Linux 上,virtualenvwrapper(链接指向这个到 Powershell 的端口)使virtualenv 的生活更加轻松。

更新:不正确,确切地说,但可能不完全符合virtualenv 的精神。您可以采取不同的策略:例如,如果您在 virtualenv 中安装 Django 和站点所需的任何其他内容,那么您可以在激活 virtualenv 的情况下在项目目录(您正在开发站点的位置)中工作。因为它已被激活,您的 Python 会找到 Django 以及您在虚拟环境中轻松安装的任何其他内容:并且因为您在项目目录中工作,所以 Python 也可以看到您的项目文件。

进一步更新:您应该能够使用pip、distribute 而不是setuptools,并且只需简单的python setup.py install 和virtualenv。只需确保在安装环境之前已激活环境即可。

【讨论】:

  • 谢谢。这如何处理我的PYTHONPATH?例如,我的项目目录位于PYTHONPATH,那里有 Django 的目录。这是不正确的做法吗?
  • 感谢您的更新。顺便说一句,virtualenv 是否仅适用于 easy_install?几个月前,我曾与一家公司合作,该公司更喜欢使用pip 而不是easy_install。这是一个完全不同的阵营,还是easy_install 是现在安装 Python 库的标准方式?
  • 我必须先“cd /Scripts”,然后输入“activate”
  • 如果我尝试激活虚拟环境,它会回答:“您必须‘获取’此脚本:PS> . .\activate ---- 但什么也没有发生
【解决方案2】:

是的,基本上这就是 virtualenv 所做的,这就是 activate 命令的用途,来自文档 here:

激活脚本

在一个新创建的 virtualenv 中 将是一个 bin/activate shell 脚本, 或 Scripts/activate.bat 批处理文件 在 Windows 上。

这会将您的 $PATH 更改为 指向 virtualenv bin/ 目录。与workingenv不同,这是 它所做的一切;这是一种方便。但 如果您使用完整的路径,例如 /path/to/env/bin/python script.py 你 不需要激活 环境第一。你必须使用 源,因为它改变了 环境到位。激活后 您可以使用的环境 功能 deactivate 撤消 变化。

激活脚本也会修改 您的 shell 提示符以指示哪个 环境当前处于活动状态。

所以你应该只使用activate 命令,它将为你完成所有这些:

> \path\to\env\bin\activate.bat

【讨论】:

  • 我是否将activate 用于一个终端实例?或者,它会永久改变我的路径吗?
  • 另外,我的PYTHON_PATH 呢?我在那里有 Django,还有我的项目目录。当我运行 activate 时,这将如何帮助所有这些,或者会?
  • @orokusaki:一个终端实例是的。而且您不必更改 PYTHONPATH; activate.bat 会为你做的,希望我的解释是好的 :)
【解决方案3】:

在 Windows 上,我安装了 python 3.7,但我仍然无法使用 ./Scripts/activate 从 Gitbash 激活 virtualenv,尽管它在 Powershell 中运行 Set-ExecutionPolicy Unrestricted 并将设置更改为“Yes To All”后从 Powershell 工作。

我不喜欢 Powershell,我喜欢使用 Gitbash,所以要在 Gitbash 中激活 virtualenv,首先导航到您的项目文件夹,使用 ls 列出文件夹的内容并确保您看到“脚本” .使用cd Scripts 将目录更改为“脚本”,一旦进入“脚本”路径,请使用. activate 激活virtualenv。不要忘记点后面的空格。

【讨论】:

  • Git Bash 应该可以与. venv/Scripts/activate(注意:句号后面有一个空格!!)或source venv/Scripts/activate 一起正常工作,至少对我有用。这可以直接使用 Git Bash 或来自 VS Code 终端窗口(我选择了 Bash)。
【解决方案4】:

创建虚拟环境后,从python的Script文件夹复制activate.bat文件并将其粘贴到您的环境中并从您的虚拟环境中打开cmd并运行activate.bat文件。enter image description here

【讨论】:

    【解决方案5】:

    在我的项目 wsgi.py 文件中,我有这段代码(它适用于 windows 和 python 3.4 中的 virtualenv、django、apache2)

    import os
    import sys
    DJANGO_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')
    sys.path.append(DJANGO_PATH)
    sys.path.append('c:/myproject/env/Scripts')
    sys.path.append('c:/myproject/env/Lib/site-packages')
    activate_this = 'c:/myproject/env/scripts/activate_this.py'
    exec(open(activate_this).read())
    from django.core.wsgi import get_wsgi_application
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
    application = get_wsgi_application()
    

    在我的虚拟主机文件中

    <VirtualHost *:80>
        ServerName mysite
        WSGIScriptAlias / c:/myproject/myproject/myproject/wsgi.py
        DocumentRoot c:/myproject/myproject/
        <Directory  "c:/myproject/myproject/myproject/">
           Options +Indexes +FollowSymLinks +MultiViews
           AllowOverride All
          Require local
       </Directory>
    </VirtualHost>
    

    【讨论】:

      【解决方案6】:

      在 Windows 中: 按 Windows(或 Windows+R),然后键入“cmd”:以正常模式运行命令提示符。

      1. cd C:\Users\user\Desktop\UserProjectName&gt; pip install virtualenv
      2. 对于创建一个 venv 运行这个virtualenv -p python3 venv
      3. 激活 virtualenv venv\Scripts\activate
      4. 看起来像这样(venv) C:\Users\user\Desktop\UserDjangoProject&gt;
      5. 然后运行pip install -r requirements.txt
      6. 显示已安装的包pip list

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-11
        • 2021-04-17
        相关资源
        最近更新 更多