Pythonのバージョン管理をPipenvにした話。Windows10ではPipenvがベストプラクティスな気がする。

どうも、りーずです。

・Windows10でのPythonのバージョン管理はPipenvが良い
・Pipenvを使えるようにする手順
・Pipenvの使い方
・requirements.txtを作成する
・requirements.txtから仮想環境をpipenvで作る
・仮想環境を有効にしようとすると「このシステムではスクリプトの実行が無効になっているため、ファイル ~.venv\Scripts\activate.ps1 を読み込むことができません。」と出る場合
・まとめ

このような構成でお届けします。Pipenvは良いよ!というメモです。

pip install pipenv
pip list
pipenv --python 3.6
.venv/Scripts/activate
deactivate
pipenv install django==2.2
django-admin startproject プロジェクト名
django-admin startapp アプリ名
python manage.py runserver
pipenv lock -r > requirements.txt

今回実際に使うのは上記のコマンドです。


・Windows10でのPythonのバージョン管理はPipenvが良い

Windows10環境のPythonのバージョン管理でAnacondaを使ったり、Virtualenvを使ったり、素のPythonでpipを使っていたりしたのですが、最近はPipenvDjangoなどの開発には向いているのではないかと思うようになりました。その理由を述べていきます。

最初はWindows10でAnacondaを使おうとしたのですが、使いたいライブラリがなかなか動かせなかったり、インストールの設定でどれがベストなのかが分かりにくかったり、pipコマンドと混ぜると良くない(?)などの情報があり、使わなくなりました。
一言でいうと初心者には難しいです。

その後、Udemyや海外のYouTubeのPythonの英語の動画を見ているとよく使われているvirtualenvを使っていました。

しかしvirtualenvはPythonのバージョンを切り替えられないという欠点がありました。
(Python3.6、3.7、3.8などを切り替えられない。)

そこで色々と調べた結果、Pipenvを使うと
・Pythonのバージョンそのものも管理(切り替え)が出来る
・個々のフォルダ内で環境を作り、アクティベートするとそのまま設定したものが使える

というように、やりたいことが出来る唯一のバージョン管理ツールでした。
これには非常に利便性を感じたので、Djangoなどのアプリケーションを作ったり、ちょっとしたプログラミングをするにはPipenvでいいかな、という結論になりました。

僕はAnacondaとの共存は諦め、とりあえずPipenvのみでやっていこうと思いました。

これらのツイートで貼っているリンクが参考にしたものです。


・Pipenvを使えるようにする手順

まず、使いたいPythonは、公式からダウンロードしてインストールしておきます。(重要)

Python3.8を使いたければそれをダウンロードしてインストール、Python3.7を使いたければそれをダウンロードしてインストール、という感じです。

Pythonのインストール先ですが、

C:\Python
というフォルダを作り、そこに 続きを読む

Dockerで開発するRuby on Railsアプリで、マイグレーションファイルを作りマイグレーションを実行する方法。ユニークインデックスを追加する。

Dockerでマイグレーションファイルを作成し、マイグレーションを実行する方法です。

 

Railsのバージョンは7.0.4 / Ruby 3.2.0です
今回は、カラムにユニークインデックスを追加します。

 

まず最初にdockerデスクトップアプリを起動します。
その次にマイグレーションファイルを作成。

docker compose run web bundle exec rails g migration ファイル名

web の部分はdockerでアプリケーションをどういう名前にしているかによりますが僕の場合はwebです。

ファイル名は何をしているかが分かると良いので
docker compose run web bundle exec rails g migration add_unique_index_to_videos

というようにします。

これでひな形の


lass AddUniqueIndexToVideos < ActiveRecord::Migration[7.0]
  def change
  end
end

このようなファイルが作成されたと思うので、中に記述していきます。

今回はユニークインデックスをカラムに追加するので


add_index :テーブル名, :カラム名, unique: true

というようにします。

テーブル名は小文字で複数形、カラム名はそのままです。

全体では


lass AddUniqueIndexToVideos < ActiveRecord::Migration[7.0]
  def change
    add_index :テーブル名, :カラム名, unique: true
  end
end

このようになります。

そうしたら、マイグレーションコマンド


docker compose run web bundle exec rails db:migrate

でマイグレーションを行います。

 

ちなみにロールバックは


docker compose run web bundle exec rails db:rollback

これで出来るので、ロールバックしてみてデータベースのテーブルの設定が元の状態に戻るか確かめます。僕はHeidiSQLというアプリで接続して試すことが多いです。

1つずつバージョン番号を指定してロールバックしたい場合は


docker compose run web bundle exec rails db:migrate:status

コマンドでマイグレーションの状態を調べて、バージョン番号を確認します。


# 特定のマイグレーションを実行したい場合
docker compose run web bundle exec rails db:migrate:up VERSION=バージョン番号
# 特定のマイグレーションをロールバックしたい場合
docker compose run web bundle exec rails db:migrate:down VERSION=バージョン番号

テスト用にDBを同期したい場合は


docker compose exec spring bin/rails db:test:prepare

を実行します。(忘れやすいので注意)

これで大丈夫そうならOKです。

git add .
git commit -m "マイグレーションファイルの作成とマイグレーション実行"
git push origin main

のようにして、gitでpushしましょう。

また、render.comの場合はマイグレーションを実行環境のシェルで行う必要があるので
ブラウザの設定画面でシェルに接続して


rails db:migrate

と打つと、デプロイされた環境でマイグレーションが実行されます。

【おまけ】
ちなみにマイグレーションでnull: falseにした場合は
downにnull: trueを記述しないとロールバックで元に戻らないので、upとdownを明示してあげます。

(例)


class ChangeCollationOfVideosTitle < ActiveRecord::Migration[7.0]
  def up
    change_column :videos, :title, :string, collation: "utf8mb4_bin", null: false
  end

  def down
    change_column :videos, :title, :string, collation: "utf8_bin", null: true
  end
end

以上です。

何かの参考になれば幸いです。

Docker環境でPythonを動かす

「DockerでPython実行環境を作ってみる」
https://qiita.com/jhorikawa_err/items/fb9c03c0982c29c5b6d5

こちらの記事を参考にしました。

用意するもの

docker-env1/
  ├ Dockerfile
  ├ docker-compose.yml
  └ opt/
    └ sample.py

という構成。
環境はいくつか作ると思うので
evn1 env2 env3のように番号をふることにします。(命名は自由です)

それぞれファイルを作る

Dockerfile

FROM python:3
USER root

RUN apt-get update
RUN apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

RUN apt-get install -y vim less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

RUN python -m pip install jupyterlab

 

docker-compose.yml

version: '3'
services:
  python3:
    restart: always
    build: .
    container_name: 'python3'
    working_dir: '/root/'
    tty: true
    volumes:
      - ./opt:/root/opt

 

sample.py

import math
import sys

def main():
  val = float(sys.argv[1])
  print(math.radians(val))

if __name__ == "__main__":
  main()

これだけ。

 

あとはプロジェクトルートに入り、

docker-compose up -d --build

を実行。

そのあとにVisualStudioCodeのターミナルで

docker-compose exec python3 bash

を実行する。これでDocker上で起動している仮想Linuxのコンソールに入れる。

自分の場合は、なぜかWindows PowerShellでは上のコマンドが実行できなかったので注意。VSCodeのターミナルを使いましょう。

※個人の環境設定に起因するものかもしれません。

あとはそのターミナルでLinux内部に入っている状態になるので、sample.pyがあるフォルダ(optフォルダ)にcdコマンドで入ります。

そして

python sample.py 180.0

のようにコマンドを打つと、sample.py が実行されて円周率が出るはずです。

これで仮想Linux上でのPython環境をWindows上で構築できるというのは魅力的ですね。

以上、自分用のメモでした。

XP-PENの液タブの設定が再起動時に保存されていない場合の対処法。 設定アプリ「Pentablet」でOKを押そう

どうも、りーずです。

最近液晶ペンタブレットのArtist 13.3 PROを購入したのですが、設定が保存されないという場合がありました。

これの対処方法です。

結論、設定ソフトウェアの「Pentablet」で左下の「OK」を設定変更後に押せば設定が保存されます。

これが意外と押し忘れてそのまま使って、次回の起動時に設定が保存されていない、という事があったので、備忘録として書いておきます。

画像参照。設定画面の左下の目立たないところに「OK」「キャンセル」とありますね。

ここで「OK」を押せば保存されます。

左下の「OK」を押さないと次回PC起動時に設定が保存されない。

以上、何かの参考になれば幸いです。

 

※上のリンクはAmazonアソシエイトリンクを使用しています。

Digital OceanにRailsアプリをデプロイする方法(Rails7.0.4/ Ruby3.2.0)

Digital OceanにRailsアプリをデプロイする方法です。

月5ドルのAppsというプランを使います。
クレジットカードかペイパルアカウントが必要です。(2022年12月30日現在)

Droplets」というプランではなく(これはVPSのようなプランでした)「Apps」というプランを使います。これがHerokuのように、コードをデプロイするだけでアプリケーションが動いてくれるプランです。

 

まずはGitHubにDockerで作ったRailsアプリをデプロイしておきます。

そうしたら、Digital Oceanでアカウントを作成して、GitHubを連携します。するとリポジトリを選択できるようになるので、自分の作ったリポジトリを選びます。

基本的にはこれでデプロイはできます。

やる事:

環境変数にRailsのマスターキーと、データベースの環境変数を追加します。

Manage Env Varsから

2つの変数を追加します。

また、プロジェクトの実行環境をDigital Oceanの設定で「production」にしておきます。

次に、データベースを作成している場合にはマイグレーションコマンドを打ちます。
bundle exec rake db:migrate RAILS_ENV=production

最後に、

ちなみにデータベースは外部のConoHaのデータベースサーバーを使うのが安くて一番良いと思って使っています。月500円程度でスケールも出来て、コスパも良いのでオススメ。
MariaDBですがMySQLと同じです。

bundle exec rake assets:precompile
をする必要もありました。
プリコンパイルをしてJavaScriptやCSSのアセットを最小化して使えるようにするものです。

ただ、このコマンドはrails7からはデフォルトのGemfileでは必要なgemがコメントアウトされているので、それを外してbundle installする必要があります。

コメントアウトを外すのは
gem "sassc-rails"
というgemで、それを使えるようにしてからローカルのdocker環境で
docker-compose run --rm web bundle install
をしてあげればOKです。

これでDigital OceanでRails7が動くようになりました。

ただ、メモリが足りないのか、動作はかなりモッサリです。

他のサービルとも比較して、どのサービスを使うか決めようと思います。

何かの参考になれば幸いです。

Dockerでbundle installをするときのコマンド

Dockerでbundle installをするときのコマンドです。

docker-compose run --rm web bundle install

 

【メモ】
Rubyのバージョンを上げるとき

・Dockerfileのrubyのバージョンを上げる

・Gemfileのrubyのバージョンも上げる

docker-compose build --no-cache
docker-compose run --rm web bundle install

を実行。

参考:Docker + Rails(Ruby)をバージョンアップ(アップグレード)したお話

https://qiita.com/t0sh1/items/5e7ecdc8f47505118a1f