ラベル Pipenv の投稿を表示しています。 すべての投稿を表示
ラベル Pipenv の投稿を表示しています。 すべての投稿を表示

2022年3月20日日曜日

MONOSTICKとTWELITE DIP+TWELITE STAGE ボードを使用して、アナログ入力状態(AI1)をPCで受信する

TWELITE製品を使用して、無線を活用した電子工作を簡単に行うことができます。TWELITE STAGEボード上のアナログ入力状態(AI1)ををPCに通知するには、以下の手順を実行します。

〇MONOSTICKとTWELITE DIP+TWELITE STAGEボードの写真

TWELITE製品の準備(Ubuntu 20.04の場合)


1.以下のページからTWELITE STAGE SDKをダウンロード
https://mono-wireless.com/jp/products/stage/index.html

2.ダウンロードしたファイル名を/optなどに移動して、解凍します(以下はMWSTAGE-2021-12_linux-1.zipの場合)
unzip MWSTAGE-2021-12_linux-1.zip

3.以下のようなシェルを作成し、TWELITE STAGEを起動します。実行後/dev/ttyUSB0が消えますので、MONOSTICKやTWELITEを抜き差ししてください。
※/optにインストールした場合、適宜パスは読み替えてください
runtw.sh
#!/bin/bash
sudo rmmod usbserial
sudo rmmod ftdi_sio
/opt/MWSTAGE/TWELITE_Stage.run
sudo chmod +x ./runtw.sh

sudo ./runtw.sh

TWELITE STAGE起動後は、各デバイスの初期設定を行います。
・MONOSTICK
アプリを出荷時から書き換えていた場合は、App_Wingsアプリのイメージに更新します。
Application IDを任意の数値に設定します(例: 0x11223344 -> 入力時は0xを省いて11223344)

・TWELITE DIP
アプリを出荷時から書き換えていた場合は、App_Tweliteアプリのイメージに更新します。
Application IDは通信するためにMONOSTICKと同じIDを指定します
Device ID: 任意の値(1や2など)

PC側の操作手順

1.pipenvのインストール
pipenvをインストール済みでない場合は、以下のコマンドでインストールします。
sudo apt-get -y install python3

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. pyserialのインストール
以下のコマンドでpyserialをインストールした仮想環境を作成します
mkdir twelite
cd twelite
pipenv --python 3

pipenv install pyserial

pipenv shell

3. 以下のように相手端末からの状態通知データをシリアル通信で受信してパースするサンプルプログラムを作成して、実行します。「ON BRD A1側」にディップスイッチを設定後、TWELITE STAGEボードのAI1可変抵抗を回転させて値が変わることを確認します。
※データ構造についての詳細は以下を参照してください。
https://mono-wireless.com/jp/products/TWE-APPS/App_Twelite/step3-81.html

twelite_analog.py
import serial
import time

def parse_notification(line):
  if line[0:1] != ':'.encode('utf-8'):
    return []
  # 送信元のデバイスID(1byte)
  device_id = line[1:3]
  # コマンド(1byte)
  command = line[3:5]
  # パケット識別子(1byte)
  packet_id = line[5:7]
  # プロトコルバージョン(1byte)
  protocol_version = line[7:9]
  # LQI値(1byte)
  lqi = line[9:11]
  # 送信元の個体識別番号(4byte)
  source_id = line[11:19]
  # 宛先の論理デバイスID(1byte)
  logical_device_id = line[19:21]
  # タイムスタンプ(2byte)
  ts = line[21:25]
  # 中継フラグ(1byte)
  relay_flag = line[25:27]
  # 電源電圧mV(2byte)
  power_voltage = int(line[27:31],16)
  # 未使用(1byte)
  reserved = line[31:33]
  # DIの状態ビット(1byte)
  di1 = (True if int(line[33:35], 16) & 0x01 != 0 else False)
  di2 = (True if int(line[33:35], 16) & 0x02 != 0 else False)
  di3 = (True if int(line[33:35], 16) & 0x04 != 0 else False)
  di4 = (True if int(line[33:35], 16) & 0x08 != 0 else False)
  # 変更状態ビット(1byte)
  mf1 = (True if int(line[35:37], 16) & 0x01 != 0 else False)
  mf2 = (True if int(line[35:37], 16) & 0x02 != 0 else False)
  mf3 = (True if int(line[35:37], 16) & 0x04 != 0 else False)
  mf4 = (True if int(line[35:37], 16) & 0x08 != 0 else False)
  # AD1-AD4の変換値(各1byte)
  ad1 = int(line[37:39], 16)
  ad2 = int(line[39:41], 16)
  ad3 = int(line[41:43], 16)
  ad4 = int(line[43:45], 16)
  # AD1-AD4の補正値(1byte)
  cd = int(line[45:47], 16)
  adv1 = (ad1 * 4 + (cd & 0x03))*4
  adv2 = (ad2 * 4 + ((cd >> 2) & 0x03))*4
  adv3 = (ad3 * 4 + ((cd >> 4) & 0x03))*4
  adv4 = (ad4 * 4 + ((cd >> 6) & 0x03))*4
  # チェックサム(1byte)
  csv = line[47:49]
  cs = format(256-(sum([ int(line[li:li+2], 16) for li in range(1, len(line)-2, 2) ]) & 0x000000ff), '02x')
  csr = True if csv.lower() == cs else False
  result = {"device_id":device_id, "command":command, "packet_id":packet_id, "protocol_version":protocol_version, "lqi":lqi, "source_id":source_id, "logical_decice_id":logical_device_id,"ts":ts, "relay_flag":relay_flag, "power_voltage":power_voltage, "di1":di1, "di2":di2, "di3":di3, "di4":di4, "mf1":mf1, "mf2":mf2, "mf3":mf3, "mf4":mf4, "adv1":adv1, "adv2":adv2, "adv3":adv3, "adv4":adv4, "csr":csr}
  return result

ser = serial.Serial(port='/dev/ttyUSB0',baudrate=115200,timeout=10)
try:
  while True:
    rl = ser.readline()
    print(rl)
    result = parse_notification(rl)
    if "adv1" in result:
      print("AI1:{}".format(result["adv1"]))
except KeyboardInterrupt:
  # close
  print("stopped.")
finally:
  ser.close()

・実行コマンド
python twelite_analog.py

2022年2月25日金曜日

MONOSTICKとTWELITE DIP+TWELITE STAGE ボードを使用して、ボタン状態をPCで受信する

TWELITE製品を使用して、無線を活用した電子工作を簡単に行うことができます。TWELITE STAGEボード上のDI1/DI2タクトスイッチの状態をPCに通知するには、以下の手順を実行します。

〇MONOSTICKとTWELITE DIP+TWELITE STAGEボードの写真

TWELITE製品の準備(Ubuntu 20.04の場合)


1.以下のページからTWELITE STAGE SDKをダウンロード
https://mono-wireless.com/jp/products/stage/index.html

2.ダウンロードしたファイル名を/optなどに移動して、解凍します(以下はMWSTAGE-2021-12_linux-1.zipの場合)
unzip MWSTAGE-2021-12_linux-1.zip

3.以下のようなシェルを作成し、TWELITE STAGEを起動します。実行後/dev/ttyUSB0が消えますので、MONOSTICKやTWELITEを抜き差ししてください。
※/optにインストールした場合、適宜パスは読み替えてください
runtw.sh
#!/bin/bash
sudo rmmod usbserial
sudo rmmod ftdi_sio
/opt/MWSTAGE/TWELITE_Stage.run
sudo chmod +x ./runtw.sh

sudo ./runtw.sh

TWELITE STAGE起動後は、各デバイスの初期設定を行います。
・MONOSTICK
アプリを出荷時から書き換えていた場合は、App_Wingsアプリのイメージに更新します。
Application IDを任意の数値に設定します(例: 0x11223344 -> 入力時は0xを省いて11223344)

・TWELITE DIP
アプリを出荷時から書き換えていた場合は、App_Tweliteアプリのイメージに更新します。
Application IDは通信するためにMONOSTICKと同じIDを指定します
Device ID: 任意の値(1や2など)

PC側の操作手順

1.pipenvのインストール
pipenvをインストール済みでない場合は、以下のコマンドでインストールします。
sudo apt-get -y install python3

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. pyserialのインストール
以下のコマンドでpyserialをインストールした仮想環境を作成します
mkdir twelite

cd twelite

pipenv --python 3

pipenv install pyserial

pipenv shell

3. 以下のように相手端末からの状態通知データをシリアル通信で受信してパースするサンプルプログラムを作成して、実行します。赤タクトスイッチの状態はdi1、緑タクトスイッチの状態はdi2にTrue/Falseで格納されます。
※データ構造についての詳細は以下を参照してください。
https://mono-wireless.com/jp/products/TWE-APPS/App_Twelite/step3-81.html

twelite_buttons.py
import serial
import time

def parse_notification(line):
  if line[0:1] != ':'.encode('utf-8'):
    return []
  # 送信元のデバイスID(1byte)
  device_id = line[1:3]
  # コマンド(1byte)
  command = line[3:5]
  # パケット識別子(1byte)
  packet_id = line[5:7]
  # プロトコルバージョン(1byte)
  protocol_version = line[7:9]
  # LQI値(1byte)
  lqi = line[9:11]
  # 送信元の個体識別番号(4byte)
  source_id = line[11:19]
  # 宛先の論理デバイスID(1byte)
  logical_device_id = line[19:21]
  # タイムスタンプ(2byte)
  ts = line[21:25]
  # 中継フラグ(1byte)
  relay_flag = line[25:27]
  # 電源電圧mV(2byte)
  power_voltage = int(line[27:31],16)
  # 未使用(1byte)
  reserved = line[31:33]
  # DIの状態ビット(1byte)
  di1 = (True if int(line[33:35], 16) & 0x01 != 0 else False)
  di2 = (True if int(line[33:35], 16) & 0x02 != 0 else False)
  di3 = (True if int(line[33:35], 16) & 0x04 != 0 else False)
  di4 = (True if int(line[33:35], 16) & 0x08 != 0 else False)
  # 変更状態ビット(1byte)
  mf1 = (True if int(line[35:37], 16) & 0x01 != 0 else False)
  mf2 = (True if int(line[35:37], 16) & 0x02 != 0 else False)
  mf3 = (True if int(line[35:37], 16) & 0x04 != 0 else False)
  mf4 = (True if int(line[35:37], 16) & 0x08 != 0 else False)
  # AD1-AD4の変換値(各1byte)
  ad1 = int(line[37:39], 16)
  ad2 = int(line[39:41], 16)
  ad3 = int(line[41:43], 16)
  ad4 = int(line[43:45], 16)
  # AD1-AD4の補正値(1byte)
  cd = int(line[45:47], 16)
  adv1 = (ad1 * 4 + (cd & 0x03))*4
  adv2 = (ad2 * 4 + ((cd >> 2) & 0x03))*4
  adv3 = (ad3 * 4 + ((cd >> 4) & 0x03))*4
  adv4 = (ad4 * 4 + ((cd >> 6) & 0x03))*4
  # チェックサム(1byte)
  csv = line[47:49]
  cs = format(256-(sum([ int(line[li:li+2], 16) for li in range(1, len(line)-2, 2) ]) & 0x000000ff), '02x')
  csr = True if csv.lower() == cs else False
  result = {"device_id":device_id, "command":command, "packet_id":packet_id, "protocol_version":protocol_version, "lqi":lqi, "source_id":source_id, "logical_decice_id":logical_device_id,"ts":ts, "relay_flag":relay_flag, "power_voltage":power_voltage, "di1":di1, "di2":di2, "di3":di3, "di4":di4, "mf1":mf1, "mf2":mf2, "mf3":mf3, "mf4":mf4, "adv1":adv1, "adv2":adv2, "adv3":adv3, "adv4":adv4, "csr":csr}
  return result

ser = serial.Serial(port='/dev/ttyUSB0',baudrate=115200,timeout=10)
try:
  while True:
    rl = ser.readline()
    print(rl)
    result = parse_notification(rl)
    if "di1" in result and result["di1"]:
      print("DI1ボタンが押されています。")
    else:
      print("DI1ボタンが離されています。")

    if "di2" in result and result["di2"]:
      print("DI2ボタンが押されています。")
    else:
      print("DI2ボタンが離されています。")
except KeyboardInterrupt:
  # close
  print("stopped.")
finally:
  ser.close()

・実行コマンド
python twelite_buttons.py

2020年12月18日金曜日

pythonとpydubで音楽ファイルのボリュームを変更する(pipenv版)

pydubで音楽ファイルに対して様々な編集をすることができます。

pydubでボリュームを変更する手順

1.pipenvのインストール
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. pydub用の仮想環境作成
pipenvを使用する場合は以下のコマンドで、pydub用の仮想環境を作成します。
sudo apt-get -y install ffmpeg 

mkdir -p ~/pydub

cd ~/pydub

pipenv --python 3.8

pipenv install pydub

pipenv shell

3. サンプルプログラムの作成と実行
以下のスクリプトを保存します。ファイル名は適宜変更してください。
change_volume.py
from pydub import AudioSegment

af = AudioSegment.from_mp3("yoursong.mp3")
# 10dB音を大きくして、保存する
af_plus_10db = af + 10
af_plus_10db.export("yoursong_plus_10db.mp3", format="mp3")

# 10dB音を小さくして、保存する
af_minus_10db = af - 10
af_minus_10db.export("yoursong_minus_10db.mp3", format="mp3")

以下のコマンドでスクリプトを実行します。
python change_volume.py

関連情報

・pydubのgithubリポジトリ
https://github.com/jiaaro/pydub

・pydubに関する他の記事は以下のまとめページを参照してください。
pydubまとめ

2020年9月7日月曜日

Debian 10(Buster)にJupyter Labをインストールする(pipenv版)

Jupyter Labでインタラクティブなコンピューティング環境を提供する事ができます。

〇Jupyter Labの画面

インストール手順

1.pipenvのインストール
sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. Jupyterのインストール
mkdir -p ~/jupyter

cd ~/jupyter

pipenv --python 3.7

pipenv install

pipenv install jupyterlab

mkdir -p ~/.jupyter

cat << EOF > ~/.jupyter/jupyter_notebook_config.py
c.JupyterApp.allow_remote_access = True
c.JupyterApp.ip = '0.0.0.0'
c.JupyterApp.open_browser = False
c.JupyterApp.port = 8080
c.JupyterApp.token = 'jupyter'
EOF

3. Jupyter Labをサービスとして登録
※以下の例ではdebianユーザでのサービス動作を想定しています。環境に合わせ、ユーザ名・パスを適宜変更してください。
cat << EOF | sudo tee /etc/systemd/system/jupyter.service
[Unit]
Description=Jupyter
[Service]
Type=simple
ExecStart=/home/debian/jupyter/.venv/bin/jupyter-lab
User=debian
Group=debian
WorkingDirectory=/home/debian/jupyter
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF

sudo systemctl enable jupyter

sudo systemctl start jupyter

4. ブラウザで以下のアドレスにアクセスします。
http://<サーバ名またはIPアドレス>:8080/?token=jupyter

関連情報

・Jupyterに関する他の情報はこちらを参照してください。

2020年8月1日土曜日

Ubuntu 20.04にpipenvとmoviepyをインストールする

moviepyで動画をpythonから編集する事ができます。

インストール方法

1.pipenvのインストール
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev 

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. moviepy用の仮想環境作成
mkdir -p ~/moviepy

cd ~/moviepy

sudo apt-get -y install libpng-dev libfreetype-dev

pipenv --python 3.8

pipenv install matplotlib

pipenv install moviepy

pipenv shell

3. 動作確認用コード実行
以下のコードを実行すると、指定した動画の最初の10秒を切り出します。
from moviepy.editor import *

clip = VideoFileClip("hydrangea.mp4").subclip(0,10)
clip.write_videofile("hydrangea_opening.mp4")

関連情報

MoviePyのまとめ

・moviepyのホームページ
https://zulko.github.io/moviepy/

2020年7月22日水曜日

Ubuntu 20.04にJupyter Labをインストールする(pipenv版)

Jupyter Labでインタラクティブなコンピューティング環境を提供する事ができます。

〇Jupyter Labの画面

インストール手順

1.pipenvのインストール
以下のコマンドを実行します
sudo apt-get -y install python3-pip python3-distutils python3-dev python3-testresources

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. Jupyterのインストール
mkdir -p ~/jupyter

cd ~/jupyter

pipenv --python 3.8

pipenv install

pipenv install jupyterlab

sudo apt-get -y install libatlas-base-dev

pipenv install matplotlib

pipenv install pandas

mkdir -p ~/.jupyter

cat << EOF > ~/.jupyter/jupyter_notebook_config.py
c.JupyterApp.allow_remote_access = True
c.JupyterApp.ip = '0.0.0.0'
c.JupyterApp.open_browser = False
c.JupyterApp.port = 8080
c.JupyterApp.token = 'jupyter'
EOF

3. Jupyter Labをサービスとして登録
以下の場合は実行ユーザをubuntuユーザとしています。環境に合わせて、変更してください。
cat << EOF | sudo tee /etc/systemd/system/jupyter.service
[Unit]
Description=Jupyter
[Service]
Type=simple
ExecStart=/home/ubuntu/jupyter/.venv/bin/jupyter-lab
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/jupyter
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF

sudo systemctl enable jupyter

sudo systemctl start jupyter

4. ブラウザで以下のアドレスにアクセスします。
http://<サーバ名またはIPアドレス>:8080/?token=jupyter

関連情報

・Jupyterに関する他の情報はこちらを参照してください。

・Anaconda版は以下の記事を参照してください
Debian 10(Buster)/Ubuntu 20.04にJupyter Labをインストールする

2020年7月16日木曜日

Ubuntu 20.04上のpipenv環境にopencv-pythonを入れて動画の情報を取得する

Ubuntu 20.04上のpipenv環境にopencv-pythonを入れて動画の情報を取得するには、以下の手順を実行します。

opencv-pythonをインストールして動画の情報を取得する手順

1. pipenvのインストール
sudo apt-get -y install python3-pip

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. 仮想環境の作成
mkdir -p ~/opencv-python

cd ~/opencv-python

pipenv --python 3.8

pipenv install

pipenv install opencv-python

3. プログラムの作成と実行
show_videoinfo.py
import cv2
videofile = "./hydrangea.mp4"
cv2video = cv2.VideoCapture(videofile)

width  = cv2video.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cv2video.get(cv2.CAP_PROP_FRAME_HEIGHT)
print("解像度: {}x{}".format(width, height))

framecount = cv2video.get(cv2.CAP_PROP_FRAME_COUNT)
print("フレーム数: {}".format(framecount))

frames_per_sec = cv2video.get(cv2.CAP_PROP_FPS)
print("秒間フレーム数: {}".format(frames_per_sec))

print("動画の長さ(sec):", framecount / frames_per_sec)

実行コマンド
pipenv run  python show_videoinfo.py

動作確認環境

Ubuntu 20.04

関連情報

・OpenCVに関する他の記事はこちらを参照してください。

2020年1月6日月曜日

VagrantでpipenvとOpenCVをインストールした仮想マシン(Ubuntu18.04)を構築する

pipenvの仮想環境内にopencv-pythonをインストールした仮想マシンを構築するには、以下のVagrantfileを使用します。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804pipenvopencv"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804pipenvopencv"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.119", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.119", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
locale-gen ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
timedatectl set-timezone Asia/Tokyo

# install pipenv
apt-get -y install python3.6 python3-distutils
apt-get -y install python-pip
#pip install --upgrade pip
pip install pip==9.0.1
pip install --upgrade setuptools
pip install pipenv

# install OpenCV
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install \
  build-essential \
  cmake \
  git \
  libjpeg-dev \
  libpng-dev \
  libtiff-dev \
  libgtk2.0-dev \
  libavcodec-dev \
  libavformat-dev \
  libswscale-dev \
  python-dev \
  python-numpy \
  libtbb2 \
  libtbb-dev \
  libdc1394-22-dev

# create a environment for test.
mkdir /home/vagrant/opencv
cd /home/vagrant/opencv
pipenv --python 3.6
pipenv install opencv-python
pipenv install opencv-contrib-python
#pipenv shell
cat << EOF > /home/vagrant/opencv/test.py
import cv2
print(cv2.__version__)
EOF
pipenv run python test.py

SHELL
end

関連情報

・OpenCVに関する他の記事はこちらを参照してください。

2019年11月24日日曜日

Ansibleでpipenvをインストールする

以下のファイルを使用して、Ansibleでpipenvをインストールする事ができます。

pipenv.yml
- hosts: pipenv
  roles:
    - pipenv

roles/pipenv/tasks/main.yml
---
- name: install required packages
  apt:
    name: "{{ packages }}"
  vars:
    packages:
    - python-pip
    - python3-distutils
    - python3-dev
  become: true

- name: install pipenv
  pip:
    name: pipenv
    executable: pip
  become: true

〇動作環境
・Ubuntu 18.04

2019年10月5日土曜日

VagrantでVisual Studio Code、Pipenv環境、TigerVNCがインストールされた仮想マシン(Ubuntu18.04)を構築する

Visual Studio Codeはオープンソースのエディタです。エディタからPythonのデバッグ実行を行うこともできます。

〇Visual Studio Codeの画面

仮想マシン構築時にpytest1というpipenv環境も作成してあるので、フォルダ選択します。
また、デバッグ実行時に「構成の追加...」を選択して「Python」を選択します。ここでlaunch.jsonがオープンされるので、"Python: Current File"の構成でpythonPath":"${workspaceFolder}/.venv/bin/pyton"を追加します。
これでデバッグ実行時にpipenvの環境を使用することができます。

〇構築方法
以下のVagrantfileを使用して、Visual Studio Code、Pipenv環境、TigerVNCをインストールした仮想マシン(Ubuntu18.04)を構築できます。
TigerVNCがインストールされているので、VNCクライアントで接続することができます。VNCパスワードはvagrantです。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804vncxfcevscpy"
  config.vm.network :public_network, ip:"192.168.1.108"
  config.vm.network "private_network", ip: "192.168.55.108", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804vncxfcevscpy"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
export DEBIAN_FRONTEND=noninteractive
apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install language-pack-ja fonts-ipafont-*
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
apt-get -y install fcitx-mozc xubuntu-desktop xfce4-terminal language-pack-ja tigervnc-standalone-server expect
apt-get -y purge light-locker blueman
im-config -n fcitx


# set passwd for vnc
cat << EOC > /tmp/initpass.sh
/usr/bin/expect << EOF
spawn "tigervncpasswd"
expect "Password:"
send "vagrant\\r"
expect "Verify:"
send "vagrant\\r"
expect "Would you like to enter a view-only password (y/n)?"
send "n\\r"
expect eof
exit
EOF
EOC
chmod +x /tmp/initpass.sh
sudo -u vagrant -H /bin/bash -c "/tmp/initpass.sh"


mkdir -p /home/vagrant/.vnc
chown vagrant:vagrant /home/vagrant/.vnc
cat << EOF > /home/vagrant/.vnc/xstartup
#!/bin/sh
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx
fcitx -r -d &
exec startxfce4
EOF
chmod +x /home/vagrant/.vnc/xstartup

cat << EOF > /etc/systemd/system/vncserver@.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=simple
User=vagrant
PAMName=login
PIDFile=/home/%u/.vnc/%H%i.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver :%i -localhost no -geometry 1152x864 -alwaysshared -fg
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl start vncserver@1.service
sudo systemctl enable vncserver@1.service


# install pipenv
apt-get -y install python-pip python3-distutils python3-dev
pip install pip==9.0.1
pip install --upgrade setuptools
pip install pipenv

# install VisualStudio Code
wget -O vsc.deb https://go.microsoft.com/fwlink/?LinkID=760868
dpkg -i vsc.deb

sudo -u vagrant /bin/bash << EOF
export HOME=/home/vagrant
export PIPENV_VENV_IN_PROJECT=true
code --install-extension MS-CEINTL.vscode-language-pack-ja
code --install-extension ms-python.python
echo "export PIPENV_VENV_IN_PROJECT=true" >> .bashrc

# create a sample environment and install nagisa module.
mkdir pytest1
code -a /home/vagrant/pytest1
cd /home/vagrant/pytest1
pipenv --python 3.6
pipenv install
pipenv install nagisa
pipenv run python -V
cat << EOF_CODE > test.py
import nagisa
text = 'Pythonで簡単に使えるツールです'
words = nagisa.tagging(text)
print(words)
EOF_CODE

echo 'add "pythonPath":"\\$\{workspaceFolder\}/.venv/bin/pyton" in "Python Current File" in launch.json'
EOF

init 5
SHELL
end


○関連情報
・Visual Studio Codeに関する他の記事はこちらを参照してください。

2018年10月2日火曜日

Vagrantでpipenvをインストールした仮想マシン(Ubuntu18.04)を構築する

pipenvで、簡単にpython開発環境をセットアップする事ができます。

以下のVagrantfileを使用して、pipenvをインストールした仮想マシンを構築する事ができます。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804pipenv"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804pipenv"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.75", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.75", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
locale-gen ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
timedatectl set-timezone Asia/Tokyo

# install pipenv
apt-get -y install python3.6 python3-distutils
apt-get -y install python-pip
pip install pip==9.0.1
pip install --upgrade setuptools
pip install pipenv

# create a test environment.
mkdir env1
cd env1
pipenv --python 3.6
pipenv install
pipenv run python -V

SHELL
end

2018年6月16日土曜日

Vagrantでpipenvをインストールした仮想マシン(CentOS7.4)を構築する

pipenvで、簡単にpython開発環境をセットアップする事ができます。

以下のVagrantfileを使用して、pipenvをインストールした仮想マシンを構築する事ができます。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.4"
  config.vm.hostname = "co74pipenv"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co74pipenv"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.105", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.105", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
localectl set-locale LANG=ja_JP.UTF-8

yum -y install epel-release
yum -y install python36
yum -y install python-pip
pip install --upgrade pip
pip install --upgrade setuptools
pip install pipenv

mkdir env1
cd env1
pipenv --python 3.6
pipenv install
pipenv run python -V

SHELL
end