LoginSignup
3
5

自分とこの環境下におけるPython使用ルール

Last updated at Posted at 2021-07-06

完全に研究室のPython使用ルールとしてページを作成する.
ここで使用するpipenvについて,便利サイトを参考にてリンクを貼っておくので参考に.

更新履歴
2023/09/04:pyenv記述
2022/02/09:pipenv install ==と~=の説明間違いを修正
2021/07/07:学生の要望によりvenvからpipenvに変更
2021/07/06:書き始め,anaconda使ったものからvenvの使用に舵をきった

概要

大枠

Python関連でaptで入れないもの(特にpipなどで入れるパッケージ)は原則として各自導入(システム管理者はインストールしないものと)することとする.

Pythonとパッケージ

Pythonにはパッケージと呼ばれる沢山の便利ライブラリがある.これを必要に応じてインストール・使用することで色々なプログラムを簡単に作れる.とりあえず,「Python パッケージとは」とかで検索するとちゃんと説明文が出てくるので詳しくはそちらを参考のこと.

便利なパッケージの落とし穴?

複数のパッケージを入れているとパッケージ間の依存関係が強くなる.最新のバージョンにしていれば良いのではなく,古い適切なバージョンが求められる場合もある.すると,10のプロジェクト・プログラムを作成すると,それぞれに必要なパッケージをインストールすることになり,Aのプログラムではaのバージョン,Bのプログラムではbのバージョンが必要になって困る,なんてことが起こる.

またgit(GitLab,GitHub経由)でコードをcloneした場合,もとの環境でどんなパッケージをインストールしているか確認しておかなければ動かないこともある.例えば先輩がOpenAI gymのパッケージgymをインストール・利用してコードを書いているとする.後輩がそのコードをもらった時にgymをインストールしていない or 大きく異なるバージョンを使用していると

「あれ?動かない,なんで?」

となっていらん時間をくってしまう.

そこでプロジェクト・プログラム毎にパッケージを独立にインストール・管理することで,いらん問題を回避する.うちではpipenvを使うことでこれを実現する.

方針

超初心者でもわかるPyenv, Pipenv環境構築

pyenv

Python自体のバージョン管理はpyenvで.

pipenv

パッケージ管理はpipenvで.

  • 必要なパッケージはプロジェクト・プログラムごとに導入
  • 導入したパッケージを記録しておきコードと共に管理(GitLab)
  • 他の人が使用したい場合,コードと共に記録したパッケージ情報を使用

以上の実現のために,pipenvを利用すると以下のようになる.

  • プロジェクト・プログラムごとにpipenvで仮想環境を作成
  • 仮想環境ごとに必要パッケージを導入し,仮想環境の情報(PipfileとPipfile.lock)として保持,コードと共に管理
  • 他の人が使用したい場合,PipfileやPipfile.lockから仮想環境を復元し利用

パッケージは仮想環境毎にインストールすることになるので手間がかかる一方,仮想環境間での独立性は高まる(プロジェクト・プログラムに合わせてパッケージのバージョンを自由に変えられる).

準備

もしpipを既に使っていたら

pipと混在させたくない場合,pipで入れたものをアンインストール.
やり方はアヒルの豆知識:pipで一括”アン”インストールする方法【Python】

あまり推奨はしない.

pyenvのインストール・設定

ユーザ領域にインストール.
ubuntu 20.04 / 18.04 に pyenv をインストールする話を参考に.

pipenvのインストール

$ pip install pipenv 

pyenvとの連携をしたい人は調べてそちらもインストール.

pipenvが使えない?

もしpipenv --versionとやって「コマンドが見つかりません」など出たときにはパスが通っていない可能性がある.
シェルの設定ファイルに~/.local/binを追加すること.
例えばbashの場合,~/.bashrcに以下を追加.

$ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

pipenvの管理方法

パッケージはpipenv install [package_name]でインストールする.この時,自動的に(ここ大事,らくちん)インストールしたパッケージの情報をPipfileとPipfile.lockに記載する.これらのファイルを用いれば環境を簡単に復元できる.

具体的な流れ

プロジェクト・プログラムの新規作成

プロジェクト・プログラムを新しく作成する場合,それに合わせた仮想環境を作成しパッケージ管理を行う.流れは以下の通り.

  1. プロジェクト・プログラムのディレクトリ用意.
  2. 仮想環境用意.
  3. 仮想環境の有効化.
  4. 普通にコーディング.必要に応じてパッケージをインストール.
  5. git処理.
    • 仮想環境の情報はPipfileとPipfile.lockに自動的に保存される.
  6. 以上を繰り返し.

PipfileとPipfile.lockをgit管理下に置くことが重要.

プロジェクト・プログラムのディレクトリ用意

$ mkdir [project_dir]
$ cd [project_dir]
$ git init
あとはgitの初期設定

仮想環境用意

Python3系を指定する場合
現在[project_dir]にいる状態
$ pipenv --python 3 # Python3系
Pythonのバージョンを指定する場合
現在[project_dir]にいる状態
$ pipenv --python 3.6 # Python 3.6の場合

仮想環境の有効化

$ pipenv shell

普通にコーディング,必要に応じてパッケージをインストール

現在[project_dir]にいる状態
コーディングなど
$ pipenv install [package_name]

バージョンを指定してインストールする場合は以下の通り.パッケージの例として pandas でバージョンを 0.15.0 の場合.

  • pipenv install pandas==0.15.0
    • 0.15.0を指定.
      • 厳密には0.15.0と互換性のあるもの?
    • パッケージのアップデートを防止
  • pipenv install pandas~=0.15.0
    • 0.15.0を指定.
      • 厳密には0.15.0と互換性のあるもの?
    • パッケージのアップデートは可
    • パッケージのアップデートを防止
    • 推奨の使用(らしい)

git処理

Pipfile, Pipfile.lockは自動的に作成・更新される.よって意識して編集はしなくてよい.
gitで当該ファイルを必ず管理しておく.

誰かのプロジェクト・プログラムの利用

git cloneなどで持ってきた場合.

$ git clone [project_url]
[project_dir]でcloneされるとする
$ cd [project_dir]
$ pipenv install
$ pipenv shell

仮想環境の終了

$ exit

その他

仮想環境の削除

$ cd [project_dir]
$ pipenv --rm

パッケージのアップデート

$ pipenv update

移行で動かなくなったら1

新PCへの移行,Ubuntuのバージョンアップなどで動かなくなったら.

旧PCでpython3.8系を使用しており,新PCではpython3.10のみしかない場合,もともとあるプロジェクトが使用不可能になる.
その場合,一旦仮想環境を削除して作成し直し.
その際,pythonのバージョンを新しくするのか古いのを入れるのかは...選択

また以下のように設定をexportするなど.

$ export SETUPTOOLS_USE_DISTUTILS=stdlib

移行で動かなくなったら2

新PCへの移行,Ubuntuのバージョンアップなどで動かなくなったら.
ホームディレクトリはマウントしていて旧versionの情報が残っている場合を想定.

pipenvのもととなっているpipからバージョンアップをきちんと行う.

pipとpipenv,それ以外もあれば.

移行で変なwarningがでるようになったら

PkgResourcesDeprecationWarningのwarningが出るようになったら.setuptoolsのバグっぽいので,嫌なら古いバージョンに戻しておく.

pip install --upgrade --user setuptools==58.3.0

参考

3
5
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
3
5