LoginSignup
4
4

More than 5 years have passed since last update.

【windows+anaconda】 コマンドプロンプト起動時に、自動で環境をactivateする

Last updated at Posted at 2017-07-26

背景

 windows+anaconda+コマンドプロンプトでpythonを使っています。ある環境内で作業をする際、コマンドプロンプトを開き、いちいち activate hogehoge などとするのは非常に面倒です。そこで、コマンドプロンプトを立ち上げた時に、自動的に環境に入る方法を調べました。IDE使えばいいんじゃ

環境

windows10 64bit
anaconda 1.6.0

結論

cmdrc書きましょう

理由

 公式の環境操作に関するリファレンスstackoverflowの質問を見る限り、(ana)conda側では、環境の自動アクティベートに対応していないと思われます。
 なので、コマンドプロンプトを起動した際に自動で実行されるファイルを作り、その中で環境をアクティベートする方法が一番簡単だと考えました。

方法

レジストリを編集します。作業は自己責任で行ってください。

 適当なフォルダ(ここではC:\Users\USER\とします)にcmdrc.batというファイルを作り、以下の内容を書きこみます。

cmdrc.bat
@echo off
cd /d %~dp0
if not exist "_TMP" (
type nul > _TMP
activate python_env
del "_TMP"
)

 python_envは各自の環境に置き換えてください。
 保存したらレジストリエディタを開き、HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processorの中にAutoRunという名前で文字列値を作成します。値のデータはcmdrc.batへのパスにします。
image.png
 これを保存したあと、コマンドプロンプトを開けば、環境がアクティベートされた状態で起動するはずです。

cmdrc.batの解説

@echo off:コマンドの実行を画面に表示せず行うように設定する命令です。これがないと、このファイル中の実行したコマンドがすべて画面上に表示されます。

cd /d %~dp0:カレントディレクトリをバッチファイルがある場所に移動させるコマンドです。コマンドプロンプト起動直後はC:\WINDOWS\System32にカレントディレクトリが設定されているので、そのままだと後述する_TMPファイルが作成できません。

if not exist "_TMP" (
type nul > _TMP
activate python_env
del "_TMP"
)

 単にactivate python_envとするのではなく、_TMPが存在するかどうかで処理を変えています(存在する場合は何もしない)。
 場合分けを書かずにactivate python_envとだけしたところ、コンピューターが大量にメモリを消費し、コマンドプロンプトがフリーズしました。おそらく、activateを実行する際に裏で新たにバッチファイルを起動していて、バッチファイル起動→activateを実行→activateがバッチファイル起動→そのバッチファイルがactivateを実行…と無限にバッチファイルが実行されてしまうのではないかと思います。
 最初の実行で_TMPというファイルを作成し、それ以降のバッチファイルではactivateを実行させないようにすることで、無限ループを防いでいます。

参考サイト

http://c4se.hatenablog.com/entry/2012/10/19/230718
http://www.confrage.com/dos/batch-grammar/if/if.html
http://d.hatena.ne.jp/nakamura001/20090203/1233652705
https://www.k-tanaka.net/cmd/del.php
http://qiita.com/is_books/items/44d4cda4e11e194b8345
http://kiyotakakubo.hatenablog.com/entry/20090214/1234622897

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4