VS Codeでvenvがうまく動作しなくなった話

結論 venvをあきらめて、Pipenvを導入すればなぜか解決した。 経緯 Pythonの開発環境にVS Codeを使っていましたが、ある日突然、venvで作った環境が見えなくなりました。 PowerShellからは切り替えができるので、venv自体は正しく動いているようでした。 PythonとVS Codeをクリーンインストールしても状況は変わりませんでした[1]。 Pipenvの使い方 最近はPipenvというものがあるらしいので、それを導入することとしました[2][3]。 pip install pipenv 以下のように環境変数を設定することで、プロジェクトのフォルダ直下に仮想環境を構築してくれます。 PIPENV_VENV_IN_PROJECT=true VS Code上にフォルダを作成し、その直下で仮想環境を作成します。 コマンドはVS Code上のPowerShellで行いました。 例えば以下のようになります。パスやPythonのバージョンはご自身の環境に合わせてください。 *pythonの後に半角スペースがあるのでうっかり詰めないでください。 *venvファイルが作成されるという情報もありますが、私の場合はPipfileのみ作られました。 PS PS C:\Users\User Name\Documents\CODE\Python\Test> pipenv install --python 3.8 VS Code上でF1キーを押して、「reload」を検索して実行します。 これで左下のPythonのバージョンセレクトから環境選択できるはずです。 仮想環境から抜けるときは以下のコマンドを使います。 deactivate 参考文献 [1] sota0726 「VScodeを完全にアンインストールする方法(windows10)「拡張機能のホストが予期せずに終了しました。」を改善するために」閲覧日:2020/09/13 https://www.atmarkit.co.jp/ait/articles/1810/12/news026.html [2] KRiver1 「pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。」閲覧日:2020/09/13 h

pyMCUで遊んで見る その2

 こんにちは。
今日はこのまえ紹介したpyMCUについてです。

前回はLEDがチカチカするだけでしたが、今回は7セグメントLEDを使用します。
参考にする例題はこちらです
http://www.pymcu.com/SevenSegmentLED.html

準備する部品一覧です。
高輝度ブルー7セグメントLED表示器(カソードコモン)C-551UB
カーボン抵抗(炭素皮膜抵抗) 1/4W220Ω 7本

例題で使用している7セグメントLEDはアノードコモンで、私が用意したのはカソードコモンとなっています。
単に在庫があったので使用しているのでどちらでも構いません。
ただし、当たり前ですがアノードコモンとカソードコモンで回路とプログラムが異なるので注意して下さい。
アノードコモンの回路とプログラムは例題を見てもらうとして、この記事ではカソードコモン用の回路とプログラムを記述します。

使用する7セグメントLEDと回路は以下のようになります。
pyMCU:7LED回路
抵抗値は好みに合わせて決めて下さい。
実際にブレッドボードに実装したのが以下の図です。
pyMCU:7LED回路実装

それでは次に環境設定です。
前回import sysのsys.pathにpymcuなどのフォルダを追加しましたが、その方法では一時的にしか追加されないとうい事がその後わかりました。
Windows上において自分のフォルダを追加するには、環境変数に記述する必要があります。
以下の変数を新規で作成します。

追記2012/07/19:Linux上においてもsys.pathには一時的にしか追加できず、PYTHONPATHに記述する必要があるようです。


変数名:PYTHONPATH
変数値:C:\Python26\Lib\site-packages\pymcu-1.0.8;C:\Python26\Lib\site-packages\pyserial-2.6


PYTHONPATHという変数名は決まった変数名で、この変数をPythonが自動的に参照してくれるようです。
この環境変数はsiteにもsysにも関係ないので、sys.pathにもこの変数の値は反映されないようです。
これで永続的に自分が用意したフォルダを参照出来るようになりました。

最後にプログラムを入力し、7セグメ ントLEDを点灯させます。


>>> import pymcu
>>> mb = pymcu.mcuModule()


ここまでは前回同様です。
pymcuモジュールをインポートし、pyMCUのボードを初期化します。



>>> led = [[1,2,3,4,5,6],[2,3],[1,2,7,5,4],[1,2,7,3,4],[6,7,2,3],[1,6,7,3,4],[1,6,5,4,3,7],[1,2,3],[1,2,3,4,5,6,7],[1,2,3,4,6,7]]


次にledというリストに上記のリストを入れ子にします。
これは順に0-1-2-3-4-5-6-7-8-9を表現するためにどのLEDを光らせるかというものです。
先ほど示した図のように、A-Gまである7セグメントLEDのどの位置を光らせれば目的の数字が得られるか考えれば、数字の意味がわかると思います。


>>> mb.pinLow([1,2,3,4,5,6,7])


1-7までのIOをLowにします(Highで点灯)。


>>> x = 0
>>> while 1:
        mb.pinLow([1,2,3,4,5,6,7])
        mb.pinHigh(led[x])
        mb.pausems(500)
        x += 1
        if x > 9:
                x = 0


xという変数を用意し、whileの中でカウンターの役割をさせます。
whileで無限ループを作り、プログラムを止めるまでカウントを繰り返させます。
mb.pinLow([1,2,3,4,5,6,7])は点灯しているLEDを消灯し初期化します。
mb.pinHigh(led[x])で順々に0-9までの数字を表示します。
mb.pausems(500)500 [ms]ウェイトします。
x += 1で次の数字に移ります。
if x > 9:変数xが9より大きければx = 0でカウントーを初期化します。

最後にプログラムから抜けるときはCtrl+Cで抜けることができます。
実際に実行すると以下のように数字がカウントされます(写真なので2だけですが)。
pyMCU:7LED点灯
以上のように簡単に7セグメントLEDが制御できました。
今回はここまでとなります。

コメント

このブログの人気の投稿

C++11のためにGCCの最新版をインストールする

分解:Logicool M570

MOCO'Sキッチンのフォントに似せるβ版