web-dev-qa-db-ja.com

Python virtualenvの質問

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ディレクトリに移動します)。

同じマシンで複数のバージョンのDjangoや他のライブラリを実行できるようにVirtualEnvを使用する理由を理解していますが、これは、環境を切り替えるには基本的にPATHPYTHON_PATHを変更する必要があることを意味します変数?だから、私はENVと呼ばれる環境でDjango 1.2を使用するプロジェクトDjangoプロジェクトを開発し、次にPATHを変更し、 Djangoの開発バージョンを持っているENV2という環境を使用できるように

それは基本的にそれですか、またはこれをすべて自動的に行ういくつかのより良い方法がありますか(Pythonコードでパスを更新できますが、アプリケーションにマシン固有のコードを書く必要があります) ?

また、このプロセスはLinuxでVirtualEnvを使用するのと比較してどうですか(私はLinuxの初心者です)。

50
orokusaki

通常、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」がアクティブになると、システムPythonではなく、virtualenvでPythonが実行されます。 (試してください-import sys; sys.prefixを実行すると、環境のルートが表示されます。)

新しい環境をアクティブ化して環境/プロジェクトを切り替えることができますが、activateのパス全体を指定して、アクティブ化する環境を認識させる必要があります。 PATHやPYTHONPATHを明示的に台無しにする必要はありません。

Windows Powershellを使用している場合は、 wrapper を利用できます。 Linuxでは、virtualenvwrapper(リンクがPowershellへのこのポートを指す)により、virtualenvの使用がさらに簡単になります。

更新:正しくありませんが、正確ではありませんが、virtualenvの精神に完全に一致しているとは限りません。別の方法を使うこともできます。たとえば、Djangoなど、サイトに必要なものをvirtualenvにインストールする場合、プロジェクトディレクトリ(サイトを開発している場所)で作業できます。アクティブ化されたvirtualenvアクティブになったため、PythonはDjangoおよび仮想環境に簡単にインストールしたものを見つけます。プロジェクトディレクトリで作業しているため、プロジェクトファイルはPythonにも表示されます。

更なる更新:pipの代わりにdistributesetuptoolsを使用でき、virtualenvpython setup.py installをそのまま使用できるはずです。環境に何かをインストールする前に、環境をアクティブにしていることを確認してください。

93
Vinay Sajip

はい、これは基本的にvirtualenvが行うことであり、これはdoc here からのactivateコマンドの目的です。

スクリプトを有効にする

新しく作成されたvirtualenvには、bin/activateシェルスクリプト、またはWindows上のScripts/activate.batバッチファイルがあります。

これにより、$ PATHがvirtualenv bin /ディレクトリを指すように変更されます。 workingenvとは異なり、これですべてです。それは便利です。ただし、/ path/to/env/bin/python script.pyのような完全なパスを使用する場合、最初に環境をアクティブ化する必要はありません。環境をその場で変更するため、ソースを使用する必要があります。環境をアクティブ化した後、関数deactivateを使用して変更を取り消すことができます。

アクティブ化スクリプトは、シェルプロンプトも変更して、現在アクティブな環境を示します。

そのため、すべての処理を行うactivateコマンドを使用する必要があります。

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

windowsではpython 3.7がインストールされており、./Scripts/activateでGitbashからvirtualenvをアクティベートできませんでしたが、Set-ExecutionPolicy Unrestricted Powershellおよび設定を「Yes To All」に変更します。

私はPowershellが好きではないので、Gitbashを使用したいので、Gitbashでvirtualenvをアクティブにするには、最初にプロジェクトフォルダーに移動し、lsを使用してフォルダーの内容をリストし、 「スクリプト」。 cd Scriptsを使用してディレクトリを「Scripts」に変更します。「Scripts」パスに移動したら、. activateを使用してvirtualenvをアクティブにします。ドットの後のスペースを忘れないでください。

2
Presh Onyee

私のプロジェクトのwsgi.pyファイルにはこのコードがあります(Windowsのvirtualenv、Django、Apache2で動作し、python 3.4)

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ファイルconfにある

<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>