仮想環境からインストールしたパッケージがあります。Python インタープリターを起動するだけで、そのパッケージを問題なくインポートできます。ただし、Idle を起動すると、そのパッケージはインポートできません (グローバルではなく特定の virtualenv でのみ使用できるため)。virtualenv から Idle を起動して、virtualenv のすべてのパッケージを利用できるようにするにはどうすればよいですか?
9 に答える
簡潔な答え
- 仮想環境を開始する
- 走る
python -m idlelib.idle
この回答から。
長い答え
この回答は Python 3 を想定しています。
この回答で詳しく説明されているように、いくつかの異なる仮想環境マネージャーがあり、それぞれが python がインストールされている場所と実行方法を処理する方法がわずかに異なります。
この回答は、venv
モジュールが使用されており、 docs に従ってインストールされていることを前提としています。
注: 一部の Linux ディストリビューションでは、venv モジュールが別のパッケージにパッケージ化されています: UbuntuおよびDebian
仮想環境がフォルダー内からmy_project-venv
実行して呼び出されたフォルダーにインストールされた場合、仮想環境はモジュールによって作成された新しいフォルダー内になります。python -m venv my_project-venv
my_project
my_project_dir
│
┝━ my_project-venv
Windows では、Python 3.7.1 を使用して、my_project-venv
フォルダー内のファイルはおそらく次のようになります。
my_project-venv
│
┝━ Include
┝━ Lib
┝━ Scripts
│ ┝━ ...
│ ┝━ activate.bat
│ ┝━ Activate.ps1
│ ┝━ deactivate.bat
│ ┕━ ...
│
┕━ pyvenv.cfg
仮想環境は、または PowerShell が使用されているかどうかに応じて、activate.bat
またはスクリプトを実行することで開始できます。Activate.ps1
cmd
:: Using cmd.exe
cd my_project_dir
.\my_project-venv\Scripts\activate.bat
# Using PowerShell
cd my_project_dir
.\my_project-venv\Scripts\Activate.ps1
注: これらのスクリプトをダブルクリックして実行すると、シェルが開いたままになりません。シェルを起動し、上記のコマンドを入力して実行し、プロジェクトのフォルダー名を変更します
他のほとんどのオペレーティング システムでは、仮想環境フォルダーは次のようになります。
my_project-venv
│
┝━ bin
│ ┝━ ...
│ ┝━ activate
│ ┝━ activate.csh
│ ┝━ activate.fish
│ ┕━ ...
│
┝━ include
┝━ lib
┝━ lib64
┕━ pyvenv.cfg
csh
次に、 or fish以外のシェルから、次の方法で環境をアクティブ化します。
# Most operating systems
cd my_project_dir
. my_project-venv/bin/activate
csh
およびには、仮想環境をアクティブ化するためfish
のシェル固有のスクリプト (それぞれactivate.csh
およびactivate.fish
) があり、スクリプトのように実行できますactivate
。
仮想環境がすべてのオペレーティング システムでアクティブ化されたら、次のコマンドを実行すると IDLE が開始され、仮想環境にインストールされたパッケージにアクセスできます。
python -m idlelib.idle
Python 3.6 以降については、以下の Paul Wicking の回答を参照してください。
3.6 より前の Python では、IDLE は本質的に
from idlelib.PyShell import main
if __name__ == '__main__':
main()
したがって、デフォルトのパッケージなしで virtualenv をビルドしない限り、自分で起動できます。
Windows では、このようなコマンド ラインから実行される Python スクリプトは、コマンドsome_script.py
を使用するときに使用されるものとは別の Python インタープリターによって実行される場合がありますpython some_script.py
(ファイルの関連付けによって異なりpy
ます)。この問題を回避したい場合idle.bat
は、コンテンツpython -c "from idlelib.PyShell import main; main()"
を含むバッチ ファイルを作成し、それをScripts
virtualenv のフォルダーに配置することをお勧めします。また、他の人が指摘したように、アイドル状態で機能するにはtcl
とtk
フォルダーの両方が必要です。最も簡単な解決策は、virtualenv から基本のPython インストールへのシンボリック リンクを次のように作成することです。
(2.7) c:\python\virtualenv\2.7\Lib>mklink /d tcl8.5 "c:\Program Files\Python\2.7\tcl\tcl8.5"
symbolic link created for tcl8.5 <<===>> c:\Program Files\Python\2.7\tcl\tcl8.5
(2.7) c:\python\virtualenv\2.7\Lib>mklink /d tk8.5 "c:\Program Files\Python\2.7\tcl\tk8.5"
symbolic link created for tk8.5 <<===>> c:\Program Files\Python\2.7\tcl\tk8.5
Ubuntu 15.04オペレーティング システムを使用しています。virtualenvを使用していくつかのパッケージをインストールしました。
したがって、これらのパッケージを含むvirtualenv内のファイルを実行するには、ターミナルで次のコマンドを使用します
(私の仮想環境の名前はvenv です):
#Activate the virtualenv venv
source venv/bin/activate
#To Run IDLE in virtualenv venv
python -m idlelib
IDLEを実行した後、ctrl+oキーボード ショートカットを使用してファイルを開くことができます。
いくつかの回答をまとめると、完全に機能するバッチ ファイルを使用して Windows でこれを行う方法を次に示します。
virtualenv の Scripts ディレクトリに idle.bat を作成します。tcl と tk (執筆時点ではバージョン 8.5) への両方のリンクを (存在しない限り) 作成し、それらを virtualenv の Lib ディレクトリに配置すると、アイドル状態で起動します。このコードを正確にコピーしてエディターに貼り付けます。現在の virtualenv と Python インストールのパス名を変更し (私の場合は 2.7 の標準です)、Scripts/idle.bat に保存します。
IF EXIST C:\<path to current virtualenv>\Lib\tcl8.5 (
REM do nothing
) ELSE (
mklink /d C:\<path to current virtualenv>\Lib\tcl8.5 "c:\Python27\tcl\tcl8.5"
)
IF EXIST C:\<path to current virtualenv>\Lib\tk8.5 (
REM do nothing
) ELSE (
mklink /d C:\<path to current virtualenv>\Lib\tk8.5 "c:\Python27\tcl\tk8.5"
)
python -c "from idlelib.PyShell import main; main()"
Powershell (RUN AS ADMIN!) でスクリプトを実行して、アイドル状態で開きます。
cd c:\<path to current virtualenv>\
./Scripts/idle.bat
@biomed私はWindowsを使用していて、これを試していました。python2.6フォルダーで、python26 / tcl/tcl8.5フォルダーとpython/tcl/tk8.5フォルダーをpython26/Libにコピーしてから、virtualenvのscriptsフォルダーに上記のスクリプトを作成しました。うまくいきました。
私にとっては、このようなものを起動するだけで機能します(Linuxターミナル):
source venv/bin/activate && python `which idle` &
(venvは明らかにあなたのvenvへのパスです)