ちゃんと理解して使うEXCEL関数 : 条件にあう2番目以降を抽出する方法を理解する

そもそもこの記事を書いていこうと思ったきっかけのページはこちら。

nyanto.jimdofree.com

EXCELで”条件に一致する何番目のものを取り出す”ことをやりたいだけでなら上のページに飛んですぐにコピペして使った方がよい。 この記事はなんでこの式でできるのか、よくわからない人のための記事です。 この記事を何故書くのか?というと、ググって過去と同じ記事に到達しており、”あー、x年前の俺も理解してないし、今も理解していないのか。。”と悲しくなったから今回は理解しようと思ったから。

頭脳CPUクロックが486SX世代の私には理解が遅く手間取ってしまったが、自分で”なるほど”と思ったので記事化しておく。

前書きは以上で、本題はこちら。 理解するためのステップを段階的に書いているので、長いのはご了承ください。

"INDEX+MATCH関数で複数該当の2番目以降を抽出する方法" の式を理解する!

まずは元ページで解説してくれている元式。

元サイトの数式

元サイト様にも解説はあるし、それ以外にもQAサイトでは説明してくれている人がいたりするのが、前から理解していくものが多い気がしている。 私は内側から理解する方がわかりやすかったのでその順番で。

まずは、式が多重構造になっているのでそれをばらす。 この式で使われているEXCEL関数は以下の4つ。各式自体の説明は検索すればすぐ出ると思うので、割愛。 * IFERROR  * INDEX  * LARGE * ROW 

下層(内側)から読み解く

内側からとは、どういうことかというと、関数を前からばらしていって最下層になるところとも言える。 じゃあ前から見てるじゃん!という突っ込みは置いておき、この式の階層の下になりそうなものを見る。(ここは最下層であることを確認できなくてもよい。上にたどるとズレが見つかるから) 要は一番小さい単位になるところから読んでいこうということ。

ROW関数

この式だと深そうなROWから見る。 元の式を見ると、 ”ROW(条件範囲)”となっている。 ここでの”条件範囲”とは、大元の”複数該当の2番目以降を抽出する”でいうと複数該当を示すところ、つまり、$A$5:$A$14 である。

ROW関数は指定された範囲の行数を返すものなので、 ROW(($A$5:$A$14) の意味は、A5からA14までが何行目なのかを返すことになる。 ここで、指定された範囲がセル1つではなくて範囲なので、配列が返ってくることになる。 適当なセルに =ROW($A$5:$A$14)と入力すると、5としか出てこないが、数式入力欄でF9キーを押すと、その式の値を確認できる。 式の値を確認する(F9)

結果、ROW($A$5:$A$14)は {5;6;7;8;9;10;11;12;13;14} という行数のリストが出てくることがわかる。

内側のINDEX関数~ROW関数のおまけ~

次に内側のINDEX関数を見ていく。INDEX関数に入る前に元の式を見ると、 INDEX( (条件式)/ROW(条件範囲) ,0)  ROWの前に”(条件式)/ ” がくっついている。 ここが一番わかりにくくしている原因な気がするので確認していく。 まず、”条件式”となっている部分は、 ”複数該当の2番目以降を抽出する” の、複数該当の部分。いったい何が該当するのか?という条件になる。 元ページの例で言えば、正社員の列に〇がついている物というのが条件になる。 これを式で書くと ( $A$5:$A$14="〇" ) と表せる。 この部分だけだと何が起きているのか? 適当なセルに”=( $A$5:$A$14="〇" ) " と入れて確認しようとすると "#VALUE"とエラー表示になってしまう。 だが、先ほどと同様に数式のところでF9キーを押して確認すると、 {TRUE;FALSE;TRUE;TRUE;FALSE;FALSE;TRUE;TRUE;FALSE;TRUE} というリストが取れていることがわかる。つまり、指定された範囲の順番で、成り立つかどうかを返していることになる。 では、 ( $A$5:$A$14="〇" )/ROW($A$5:$A$14) は結局何をしているの?だが、範囲を一つのセルで考えると分かりやすい。 A5だけで考えてみる。 適当なセルに "= ( $A$5="〇" )/ROW($A$5) "と入れてみると、0.2という結果が出てくる。 ( $A$5="〇" )はTRUE,ROW($A$5)=5なので TRUE/5 なのに0.2って何やねんだが、TRUE=1、FALSE=0だからこの計算が成り立っている。

これを図示すると以下のようになる。

条件を行数で割った値

実際には図に書いたように1セルずつではなくて、リストになっているわけだが。前述同様にF9キーで確認すると以下のように見える。 {0.2;0;0.142857142857143;0.125;0;0;0.0909090909090909;0.0833333333333333;0;0.0714285714285714}

なんでこんなことしているの?最初よくわからなかったが、当然意味があるので、続けて読んでほしい。 ここでのポイントは、1を行数で割っている 行数の値の逆数になっている、というところだ。 つまり、行数が進めば進むほど、値が小さくなっているということ。

さて、ようやくINDEXの話に入ろう。 INDEX関数は式の形が複数あるが、今回の場合、カンマとカッコに注意してみると、INDEX(配列,行番号)の形になっていることがわかる。 INDEX*1 1/LARGE・・・部分は前述の通りなので、 INDEX(抽出列, 条件にあう指定した番目の行数) となる。 ここでの”抽出列”は、データを抜き出したい列を指定する。 そこの何行目か、ということだ。 元ページだと、No部分を抜き出すので、1番目だったら以下のように記載することになる。 =IFERROR(INDEX(B:B,1/LARGE(INDEX*2,"") 取り出す行番号の指定がxlsの行番号だから、抽出列の指定の仕方も、一部の範囲ではなく列全体を指すB:Bとなる。

INDEX(抽出列,1/LARGE(INDEX*3 これで、条件が合う(〇がついている)何番目の行にある、抽出列で指定した列の値を取ってくることができる。

最初のIFERROR

長かった式もようやく最初のIFERRORに来た。 IFERROR(値,エラーの時の値)なので、 =IFERROR(INDEX(抽出列,1/LARGE(INDEX*4,"") この意味は、エラーの時は何も入れない。(空白)という条件が付いただけである。

よって、トータルとしては、 〇がついている(条件式)、その中で”番目”で指定した順番の行の抽出列で指定した列の値を取ってくる、取ってこれなかったら空白にする という式だと理解できる。

長かった・・・・

感想

  • (条件式)/ROW(条件範囲)で条件に合致する行番号に相当する値が作り出せた。  IFとか何もつけずに条件式をいきなり入れているから戸惑う。  別な書き方もできそう。
  • 参照と配列の部分のモヤモヤが残ってしまった。ちゃんと見返したい。

*1:$A$5:$A$14="〇")/ROW($A$5:$A$14),0) これが何かというと、F9で見ると、 {0.2;0;0.142857142857143;0.125;0;0;0.0909090909090909;0.0833333333333333;0;0.0714285714285714} になる。 INDEX関数に出てくる配列と参照の話はこちらの記事がわかりやすかったので貼っておく

INDEX関数の使い方をわかりやすく解説|行番号と列番号で指定したセルを参照する【Excel】 | わたがしワーク ―Excel tips―

内側のINDEX(配列,行番号)の式なわけだが、行番号の部分が0になっているので、セルの範囲”参照”が取れていることがわかる。

ここまでの、INDEX(($A$5:$A$14="〇")/ROW($A$5:$A$14),0)で、条件に合致する(”〇”がついている)部分は行番号の逆数が入った範囲の参照が取れることになる。

※今回このメモを作っていて、配列と参照の記述がよく理解できていないことが分かった。EXCELで言う参照と配列の違いと、その確認方法がわからない。  ① =($A$5:$A$14="〇")/ROW($A$5:$A$14)  ② =INDEX(($A$5:$A$14="〇")/ROW($A$5:$A$14),0)    違いはINDEX関数で行数0なので、参照を返すことなると思うのだが、F9でみるとどちらも同じように見える。  セルに代入すると①は#VALUE、②は0.2と結果が異なるので、違ってはいるのだろうが。  このあたりはもう少し調べないと分からなそうだ。  今回はここは一旦このままで先に進める。

LARGE

さて、ようやく次の外側のLARGE関数部分だ 1/LARGE(INDEX((条件式)/ROW(条件範囲),0),番目) 頭の”1/”部分は一旦おいておき、LARGE(INDEX((条件式)/ROW(条件範囲),0),番目) だけ考える。 LARGE関数はLARGE(配列,順位)で渡したものの順位の値を返す。

ここまでの理解で、 LARGE(”条件にあったものは行数の逆数が入った値が入った配列”,大きい順に何番目かの指定)と理解できる。 何番目のところを1とすれば、 =LARGE(INDEX(($A$5:$A$14="〇")/ROW($A$5:$A$14),0),1) 1番目に大きな値であった0.2が戻ってくるし、 =LARGE(INDEX(($A$5:$A$14="〇")/ROW($A$5:$A$14),0),2) とすれば2番目の0.1428...が戻ってくることになる。 =LARGE(INDEX(($A$5:$A$14="〇")/ROW($A$5:$A$14),0),2) 〇の数以上の8番目を指定すれば =LARGE(INDEX(($A$5:$A$14="〇")/ROW($A$5:$A$14),0),8) 0になるわけだ。 さて、LARGEの頭についていた”1/”に戻ろう。 LARGE関数の結果として、大きい順に何番目かの行数の逆数が取れる、ということは、”1/”するということは戻すことになり、行数が取れるわけだ。 つまり、 1/LARGE(INDEX((条件式)/ROW(条件範囲),0),番目)  は条件に合致した何番目のものの行番号が取得できるもの となっているわけだ。

=1/LARGE(INDEX(($A$5:$A$14="〇")/ROW($A$5:$A$14),0),1) とすれば、5(行目)、 =1/LARGE(INDEX(($A$5:$A$14="〇")/ROW($A$5:$A$14),0),1)とすれば、7(行目) となるわけである。 ここでの注意は、取得できる値は行数なので、指定した範囲の中での行番号ではなく、xlsのシート内の行番号だということだ。

外側のINDEX

やっと外側のINDEXだ。 INDEX(抽出列,1/LARGE(INDEX((条件式)/ROW(条件範囲),0),番目

*2:$A$5:$A$14="〇")/ROW($A$5:$A$14),0),1

*3:条件式)/ROW(条件範囲),0),番目

*4:条件式)/ROW(条件範囲),0),番目

ちゃんと理解して使うEXCEL関数: ことはじめ

EXCELを使っていると、 ”こんなことがしたい、式書けばできそう、検索しよう” となることはよくあると思う。

この後、見つけた記事を見て、 コピペで済ましてしまっていないだろうか?

私はコピペで済ますことをよくやってしまう。 ただ、これでは何回やっても頭に入らない。

次の事象に直面した時にやり方ではなく、検索の仕方を覚えてしまっているのだ。

これではダメだ。

これから気になったことは書き留めるようにする。 いまさらだが。

言葉の変化

twitterでちょっとバズってるものがあったので思わず読んでしまった。

日本語のこれ、誤って使っていない?というもの。 結構自分が正しいと思っているものが違っていたので、気になって調べてしまった

雑感として思ったこと。

  • わからないものは確認しよう

twitterで流れているものを見て、自分が合っている/いないを判断して一喜一憂するのはやめよう。 気になることは辞書なり出典がはっきりしているもので確認しよう。 言葉は変わっていくものだから。

  • バズらせかたを教えますって。。

元のtwitterの方がバズることは意図的できます。教えます。的な話を書いているのだけど、 確かにそういう面もあるのだろうけど、今回のは過去から何度も使われているもの。 過去の流行りをタイミングを見て、時代に合わせたツールややり方で出す、というのは延々と繰り返されて来たもの。 なんかなぁ。

Magentoにサンプルデータを入れる

サンプルデータのインストール

ここまでのインストールでMagento2環境が立ち上がったものの、フロントページは空だし、お試し商品も無いのでsampledataのインストールを行う。

手順はAdobeの公式サイトに記載されている。

Install sample data after Magento

今回はusing composerの手順に従って実施。

bin/magento sampledata:deploy
bin/magento setup:upgrade

をやっただけ。途中でAuthenticationの認証があるが、Magento2のインストールに使ったものを設定するだけ。

その後どうもURLアクセスができなくなったので、以下2つのコマンドをsudoで実施。

bin/magento indexer:reindex
bin/magento setup:di:compile

サンプルデータが入った状態でアクセスできた。

商品詳細ページの画像がちゃんと表示されないので、

bin/magento catalog:images:resize

を実行。

できましたとさ。

# WSL2をつかってMagento2環境を作る

Virtualbox-UbuntuにインストールしたMagento環境がどうにも重いので、 他の方法で環境を立ち上げたい。

今回はいいページがあったのでWSL2にインストールしてみた。 参考ページそのままなのだが、日本語で読みたい方にはこのページが参考になるかも。

参考にさせていただいたページはこちら。

How to Install Magento 2 on Windows WSL


今日の項目はこちら

下準備 Magentoのアクセスキーの発行

クリックすると入力を求められる。この入力はAccessKey発行の名前に使われる。

f:id:ignisdios:20210802005937p:plain
Magentoアクセスキー

やってみた! ★WSL2上のubuntu を使った環境立ち上げ

1. WSLのUbuntu20の複製

WSLのubuntu20.4はすでに入れて使っていたので環境を分けたい。 MicrosoftStoreのLinuxインストールは同じものを複数インストールできないので、自分のWSL上のubuntu20.4をエクスポート&インポートすることで複製する。

2. 複製したWSL上のubuntu環境でWebの手順にしたがって環境構築を進める

3. Install Nginx ,MariaDB,PHP

Nginx のインストール

WSL上のubuntuにnginxをインストールした際、ホストOS(Windows)側からブラウザアクセスしたい場合は、localhostではないことに注意。 WSL上のubuntuでは当然localhostに当たるのだが、WSLはguiがないのでcurlで確認すると正しく応答が返ってくることがわかる。

curl http://localhost

WSLのマシンのIPアドレスを確認するには、WSL上のubuntuに入り、ip aコマンドでアドレス一覧を見る。 eth0のinetを見ることでIPv4アドレスを確認することができる。 ホスト(Windows)マシンのブラウザに先ほど確認したIPアドレスを使ってブラウザでアクセスするとnginxが動いていることが確認できる。

f:id:ignisdios:20210802010356p:plain
nginxインストール成功

続いて MariaDBのインストール

インストール後に データベースを保護するパスワードを設定する。 面倒だったのでrootとおなじものにしてしまった。 本来は当然変えた方がいい。

```
sudo mysql_secure_installation
```

設定変更後はDBにログインできることを確認する

```
sudo mysql -u root -p
```
続いてPHPを入れる
```
sudo apt install php-fpm php-common php-mysql php-gmp php-curl php-intl php-mbstring php-xmlrpc php-gd php-xml php-cli php-zip php-soap php-bcmath
```

設定したパラメータは以下の通り

```
file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 1024M
cgi.fix_pathinfo = 0
upload_max_filesize = 100M
max_execution_time = 360
date.timezone =   "設定なし"
```

メモリは足りないという話があるので、参照したサイトより多めにしておいた。

4. Create Magento Database

まずMariaDBにログイン。

```
sudo mysql -u root -p
```

magento用のデータベースを作成して、データベースのユーザを作る ここでは"magentodbuser"とした。 パスワードも合わせて設定する。"new_pasword_here" の部分。

```
CREATE DATABASE magentodb;
```
```
CREATE USER 'magentodbuser'@'localhost' IDENTIFIED BY 'new_password_here';
```

magentodbuserに権限を与える この場合、新しく作ったmagentodbに対するすべての権限を与えることになる。

```
GRANT ALL ON magentodb.* TO 'magentodbuser'@'localhost' WITH GRANT OPTION;
```
```
FLUSH PRIVILEGES;
EXIT;
```

5. Download Magento

元のページだとここでMagentoDLのためのアカウント取得の記述があるが、前述の部分で取得済みだと思うので割愛。

composerが必要になるので、curl,git,composerを入れる。

```
sudo apt install curl git
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
```

nginxのルートディレクトリに移動し、GithubからMagentoパッケージを落としてくる。 落とすときのリリースの説明ページのリンクが間違ってる(drupalになってる) Magentoのリリース関係は以下のURLで確認できる。 https://devdocs.magento.com/guides/v2.3/release-notes/ v2.3のところが各バージョンに対応。 今回は2.3系の最新であるv2.3.7を使いたい。

```
cd /var/www/
sudo composer create-project --repository=https://repo.magento.com/ magento/project-community-edition magento
````
composerのレポジトリ指定は、 
[Adobeのページ](https://devdocs.magento.com/guides/v2.4/install-gde/composer.html)に例がある。

```
sudo composer create-project --repository=https://repo.magento.com/ magento/project-community-edition=2.3.7 magento
```

こんな感じになる。最後のmagentoはインストールするディレクトリの名前になる。 つまり、今 /var/www/にいるから、/var/www/magento/となる。

username とパスワードが聞かれるので、最初に準備しておいたkeyを設定する。 username = public key password = private key

インストール時に設定することリスト

```
cd /var/www/magento
sudo bin/magento setup:install --base-url=http://example.com/ --db-host=localhost --db-name=magentodb --db-user=magentodbuser --db-password=db_user_password_here --admin-firstname=Super --admin-lastname=Admin --admin-email=admin@example.com --admin-user=admin --admin-password=admin123 --language=en_US --currency=USD --timezone=America/Chicago --use-rewrites=1
```

公式のドキュメントはこちら。 https://devdocs.magento.com/guides/v2.4/install-gde/composer.html#install-magento

```
bin/magento setup:install \
--base-url=http://localhost/magento2ee \
--db-host=localhost \
--db-name=magento \
--db-user=magento \
--db-password=magento \
--admin-firstname=admin \
--admin-lastname=admin \
--admin-email=admin@admin.com \
--admin-user=admin \
--admin-password=admin123 \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1
```

自分に合わせて書き換え

```
cd /var/www/magento
sudo bin/magento setup:install --base-url=http://localhost/magento/ --db-host=localhost --db-name=magentodb --db-user=magentodbuser --db-password="DBユーザのパスワード" --admin-firstname=Super --admin-lastname=Admin --admin-email"メールアドレス" --admin-user=admin --admin-password="アドミンのパスワード" --language=en_US --currency=USD --timezone=Asia/Tokyo --use-rewrites=1
```

6. ElasticSearch

インストール時に問題が起きるときはElasticSearchをここで無効化となっている。 上記コマンドで特にエラーのも起きてないからこれでよいのかな?

7. Configure Nginx VirtualHost

nginxのvirtualhostファイルを編集する。

```
sudo nano /etc/nginx/site-available/magento
```

nano で編集することになっているが折角WSLでwindowsとつながっているのだから、該当箇所をVSCodewindows側で開いて普通に編集できる。

```
upstream fastcgi_backend {
server unix:/run/php/php7.4-fpm.sock;
}

server {
    listen 80;
    listen [::]:80;

    server_name  example.com www.example.com;
    index  index.php;

    set $MAGE_ROOT /var/www/magento;
    set $MAGE_MODE production;

    access_log /var/log/nginx/example.com-access.log;
    error_log /var/log/nginx/example.com-error.log;

    include /var/www/magento/nginx.conf.sample;
}

```

ここのポイントはserver_name . 当然インストールしたときの名前でなければつながらない。今回インストールしたときはローカルIPアドレス(WSLで割り当てられたIPアドレス)をそのまま書いたのでhttp://172.xxx.yyy.dddみたいなアドレスになっていた。

保存した後、シンボリックリンクの追加と、nginxの再起動を行う。

```
sudo ln -s /etc/nginx/sites-available/magento /etc/nginx/sites-enabled/
sudo service nginx restart
```

これで接続!とおもったら動かない。。 502 bad gateway!

困ったので、nginxのログを見てみる。 ログは前述した設定で書いたところ(/var/log/nginx/配下)に保存されている。 IPアドレスはたまたまなので都度違う。

```
2021/07/23 23:01:55 [error] 18211#18211: *2 upstream sent too big header while reading response header from upstream, client: 172.31.192.1, server: 172.31.201.55, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.4-fpm.sock:", host: "172.31.201.55"
2021/07/23 23:01:55 [error] 18211#18211: *2 upstream sent too big header while reading response header from upstream, client: 172.31.192.1, server: 172.31.201.55, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.4-fpm.sock:", host: "172.31.201.55", referrer: "http://172.31.201.55/"

```

どうもヘッダがでかすぎるというので、googleで magento2 ngix 502 bad gateway too big header とかで検索してみる。

[How to Solve 502 Bad Gateway error in Nginx Magento 2?](https://magento.stackexchange.com/questions/243248/how-to-solve-502-bad-gateway-error-in-nginx-magento-2)

これを見ると、fastcgi_buffer とproxy_bufferのサイズを大きくしろとある。

とりあえずfastcgi_bufferだけ変更してみる。 /etc/nginx/nginx.conf

```
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
```

nginxをrestart. でた!

f:id:ignisdios:20210802012011p:plain
MagentoLuna起動画面

Magentoの管理画面

管理画面のアクセス先がわからない・・・ インストールした時に表示が出ているらしい。 見落とさないように注意。

コンソールをたどると installation date...の後に xxxxxは適当に生成されるみたい。

SoftwareDesign 2020年2月号 テキスト処理の始め方 5章 躓いたところメモ

(超初心者向け) SoftwareDesigneの上記特集を試していて、躓いたところのメモ。

雑誌の特集記事になので、記事の頭からやっていけばきちんとできるようになっている。 それでも紙面の都合等で説明が足りなかったり、記事掲載時とは状況が変わったり、 初心者にとっては躓くことがある。

初心者=つまり私。永遠の初心者。この二つ名を解消することはいつになるのやら・・・

表題の第5章で躓いたところは以下の2点。

  • ライブラリが足りない
  • Dataframeのデータがキャスト(asftype)できない

ライブラリが足りない

5章ではグラフ等の描画ライブラリであるplotlyを使って人工密度を表示する演習を行う。 5章 1行目のpandasで躓いた。 pandas をimportとあるので pipでpandas をインストールするわけだが、それではまだエラーがでる。 そもそもpandasでurlのリードを使うためにはpandasだけでなく他のライブラリも必要。 インストールする必要がある。

$ pip install lxml html5lib beautifulsoup4

インストール後、記事に従って進めていくと、今度はplotlyを使うところでエラーがでる。 エラー "Mime type rendering requires nbformat>=4.2.0 but it is not installed" 今度は nbformat がないといわれてこちらもインストールする必要がある。

$ pip install nbformat

Anacondaとか入れている人は躓かないのだろうけど。

Dataframeのデータがキャストできない

ライブラリが足りない問題以外に記事記載のソースだとどうもうまく動かなかった。 具体的には以下の部分。人口の表と人口密度の表をくっつけて新たに作った表(Dataframe)は各列のデータがObject形式になっているので数値に変換する部分である。 記事のコードは以下。

int_columns = ["Area", "Population", "Density"]
merged_data[int_columns] = merged_data[int_columns].astype("int32")
merged_data.dtypes

これでやるとエラーになる。 各列を一つずつ試してみると、Densityの列が原因であることがわかる。 object形式からint32への変換なのだから、大丈夫な気がするけどエラーになる。 中身のデータを見ると小数点のあるデータがある。 なので、Density列は 一度floatにして、それをさらにintに変換することで対処できた。

上記対応の後、無事にグラフ化まで確認することができた。

f:id:ignisdios:20210606213246p:plain
人口密度グラフ

python 超初心者メモ:仮想環境

pythonの仮想環境について簡単にメモしておく。

windowsについて書いておく。 pythonってmacの記事の方が多い気がする。私は信者でもなければお金も無いのでwindowsで。  

"仮想環境" : virtual environments pythonでは仮想環境を作って作業するのがいいらしい。 pythonではその時々によって必要なパッケージをimportするわけだが、ずっと使っているとそれがたまる。

なので、用途やプロジェクトごとに仮想環境をつくって、その中で作業することできれいな環境が保てるらしい。

今回は pythonで作ったものをwindowsでexeにする際、余計なパッケージが入った環境だとexeが肥大化するということで仮想環境を作ることにした。

仮想環境を構築するにはいくつかやり方があるらしいのだが、python 公式のインストーラで提供されているものがよいと思うのでvenvを使う。

生成するときのコマンドは

py -m venv "環境の名前"

f:id:ignisdios:20200829112943p:plain
環境生成

仮想環境を作るとフォルダができている。 仮想環境を使い始めるには有効化が必要。

windowsは他とコマンドが違い、生成されたフォルダ以下、Script\activate を呼び出す。 VScodeで呼び出すときは、ターミナルで自身の配下にあるactivate(activate.bat)を呼び出す。 この指定の際、パスの区切りがバックスラッシュであることに注意。

f:id:ignisdios:20200829113035p:plain
仮想環境のactivate (windows)

このwindowsとそれ以外のパスの切れ目の違いはどうにかならないのだろうか。

activate後の操作

仮想環境をactivateすると、パスに仮想環境名が表示される。 以後、その中でpythonコマンドを実行することになる。

パッケージのインストールにはpip コマンドを使う パッケージの管理は The Python Package Index (PyPI) で行われている。 PyPIホームページ

仮想環境から出るには deactivate をうつ。

pip コマンド

こちらのページがとても参考になる。

【python】pipとは?コマンド一覧と使い方を実例で解説

pip の後にコマンドを付けて呼び出す。

install,install --update,list,list --outdate ,pip help ぐらい

とりあえず pip help を見ればどうにかなりそう。

先ほど作成した仮想環境で list をすると、

pip とsetuptoolsしかない。 (python の標準パッケージはinstall不要)

これがきれいな環境ということ。