Featured image of post Pythonでプロジェクトを作る時に使うコマンド

Pythonでプロジェクトを作る時に使うコマンド

目次

背景

  • Pythonでプロジェクトを始めるときにいつも実行するコマンドがある
  • ただ時々忘れるしコピペですましたいのでメモとして残す

前提

必要なパッケージ

予め、次のCLIを入れて、Pathを通しておく必要がある。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ python --version
Python 3.9.5

$ pyenv --version
pyenv 2.3.6-7-g19359de7

$ poetry --version
Poetry (version 1.2.2)

$ conda --version
conda 23.7.4

$ pre-commit --version
pre-commit 3.0.4

他にも、有名どころでは、Pipenvやpip-toolsがあるが、使用している環境に合わせて利用する。

開発環境について

大きく次の3つのパターンがある。 なお、venvとvirtualenvはpythonのバージョン管理ツールは含まれないため、 pyenvも併用する必要がある。

  1. venv
    • Python 3.3 以降の標準ライブラリ
    • python -m venvコマンドで利用が可能
  2. virtualenv
    • venvよりも高機能な仮想環境を作る外部パッケージ
    • poetryは内部でvirtualenvを使っている
  3. anaconda
    • Pythonの環境管理ツール
    • pyenv + virtualenvを内包したようなツール

venvとvirtualenvは似ているが実は違うパッケージなので用語の混合に注意。

pyenv

pythonのインストール

次のようにpythonのバージョンを指定してインストールする。

1
$ pyenv install 3.9.5

pythonのローカルのバージョンを変更する

virtualenvもanacondaもpyenvを使ってローカルのpythonのversionを変えた方がいい。

まずインストールしているversionの確認。 ここに既にあったらそれを利用する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ pyenv versions
  system
  3.6.9
  3.7.4
  3.7.9
  3.8.9
* 3.9.5 (set by /home/mike/workspace/xxx/.python-version)
  3.9.9
  3.9.15
  3.10.1

利用方法は次のコマンド。

1
$ pyenv local 3.9.5

これでpythonのPATHとVersionが変更される。

1
2
3
4
5
$ which python 
/home/mike/workspace/xxx/.venv/bin/python

$ python --version
Python 3.9.5

ない場合はインストールする。

1
$ pyenv install 3.9.5

venvを使う場合

環境の作成

まず、次で、.venvフォルダを生成する。

1
$ python -m venv .venv

環境の削除

削除は以下。

1
$ rm -rf .venv

環境の有効化

その後activateする(使用しているshellによってファイルが違う)。

1
$ source .venv/bin/activate

windowsの場合は以下。

1
$ .venv\Scripts\activate.ps1

Fishの場合は以下。

1
$ source .venv/bin/activate.fish

環境の無効化

disactivateの方法は次。

1
$ exit

poetryを使う場合 (virtualenv)

virtualenvの環境の初期設定

pyproject.tomlがない場合は次で生成する。

1
$ poetry init

virtualenvの環境の作成と有効化

ある場合は次でshellに入る。--pythonでpythonを指定できる。

1
$ poetry shell --python=$(which python)

なお、poetry shellした際に、pythonのバージョンが違う場合は、次のコマンドで直す。

1
2
3
4
$ exit # 一旦poetry shellから抜ける
$ python --version
3.9.5
$ poetry env use $(which python)

上記はpyenvで入れた3.9.5をlocalで使い、それをpoetry shellで利用する例。

virtualenvの環境の削除

環境の削除は以下。

1
$ rm -rf .venv

poetryでのパッケージの追加と削除

パッケージをインストールするには次を使う。

1
2
$ poetry add  xxx
$ poetry remove xxx

poetryでバージョンの更新

パッケージのバージョンを更新する時は次を使う。

1
$ poetry add xxx@0.1.1

poetryでrequirements.txtの作成

次のコマンドを利用して作成する。

1
$ poetry export -f requirements.txt > requirements.txt

poetryでバージョンの確認

次のコマンドでバージョンの確認を行う。

1
$ poetry show xxx

poetry add が遅い時の対処

IPv6でアクセスしようとして、遅くなった事があった。

1
2
$ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
$ sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1

poetry newでsrcからパッケージを作る

次のように--srcオプションでsrcフォルダから作ることが可能。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ poetry new --src my_project
my_project/
│
├── src/
│   └── my_project/
│       └── __init__.py
│
├── tests/
│   ├── __init__.py
│   └── test_my_project.py
│
├── pyproject.toml
└── README.rst

poetry new vs. poetry init

違いは次の通り。

  • poetry new
    • 新しいプロジェクトの完全な骨格を生成する
  • poetry init
    • pyproject.tomlを生成する為に使う
    • 既存のプロジェクトに Poetry のサポートを追加するために使用する

condaを使うパターン

環境の一覧

まずenvの一覧を確認する。

1
2
3
4
5
6
$ conda env list

# conda environments:
#
base                     /home/mike/anaconda3
graphtsr                 /home/mike/anaconda3/envs/xxx

環境の作成と削除

シンプルに次のコマンドで環境を作る。 python=xxxでpythonのバージョンの指定も可能。

1
$ conda create --name myenv python=3.6 

削除は以下。

1
$ conda env remove --name graphtsr

環境の有効化

アクティベーションは次のコマンドを使用する。

1
$ conda activate myenv

環境の無効化

deactivateは次となる。

1
$ conda deactivate

環境の保存

環境のoutputは次のコマンドを利用する。

1
$ conda env export > myenv.yaml

このyamlさえあれば、別の環境でも再現ができる。

1
$ conda env create --file myenv.yaml

パッケージの追加と削除

パッケージをインストールするには次を使う。

1
2
$ conda install xxx
$ conda uninstall xxx

pip

パッケージの追加と削除

パッケージをインストールするには次を使う。

1
2
$ pip install xxx
$ pip uninstall xxx

インストール済みパッケージの保存

環境を保存するには次のコマンドを利用する。

1
$ pip freeze > requirements.txt

パッケージの一括インストール

freezeしたパッケージのインストールは次を使う。

1
$ pip install -r requirements.txt

pip でバージョンの確認

次のコマンドでバージョンの確認を行う。

1
$ pip show xxx

pipの鉄板コマンド

以下のコマンドはpipを使う上で、鉄板のコマンド。

1
2
$ pip install -U pip
$ pip install -U setuptools

pre-commit

pre-commitのセットアップ

次に設定ファイル(.pre-commit-config.yaml)の例を示す。

1
2
3
4
5
6
7
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.4.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml

その後installする。

1
2
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit

pre-commitをcommitせずに適用

commitせずにpre-commitを走らせたい場合は、次のコマンドを利用する。

1
$ pre-commit run --all-files

その他

環境変数の読み込み

例として、次のようなDjangoの.envファイルを用意する。

1
2
3
DJANGO_SETTINGS_MODULE=mysite.settings_dev
DJANGO_SUPERUSER_USERNAME=admin
DJANGO_SUPERUSER_PASSWORD=admin

その後、env.shを容易する。

1
2
3
#!/bin/bash

export $(cat .env | grep -v "#")

これを現在のshellで読み込む。

1
$ source env.sh

次のように、環境変数が読み込まれているか確認できる。

1
2
3
4
$ env | grep DJANGO
DJANGO_SUPERUSER_PASSWORD=admin
DJANGO_SETTINGS_MODULE=mysite.settings_dev
DJANGO_SUPERUSER_USERNAME=admin

.gitignore

gitignoreはgitignore/Python.gitignore at main · github/gitignoreを参照にする。

poetryのおすすめの設定

総じて、parallelとvirtualenvをin-projectで作るのはおすすめ。

1
2
3
4
$ poetry config --list
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = true

packageがyankedされた場合

  • yankedされたパッケージとは、いわゆる壊れたパッケージの事
  • パッケージがyankedされたパッケージを使いたい場合は、versionを指定してインストールする
  • see PEP 592

$VIRTUAL_ENVとは

仮想環境がアクティベートされると、VIRTUAL_ENV 環境変数の値が仮想環境へのパスに設定される。

1
2
$ echo $VIRTUAL_ENV
/home/mike/playground/xxx/.venv 

pythonのversionによる問題の解決

次のようなpyproject.tomlで、

1
2
[tool.poetry.dependencies]
python = ">=3.10"

unstructuredというpkgを入れたら次のエラーがでた。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$ poetry add unstructured

Using version ^0.13.2 for unstructured

Updating dependencies
Resolving dependencies... (0.1s)

The current project's supported Python range (>=3.10,<4.0) is not compatible with some of the required packages Python requirement:
  - unstructured requires Python <3.12,>=3.9.0, so it will not be satisfied for Python >=3.12,<4.0

Because no versions of unstructured match >0.13.2,<0.14.0
 and unstructured (0.13.2) requires Python <3.12,>=3.9.0, unstructured is forbidden.
So, because rag2 depends on unstructured (^0.13.2), version solving failed.

  • Check your dependencies Python requirement: The Python requirement can be specified via the `python` or `markers` properties
    
    For unstructured, a possible solution would be to set the `python` property to ">=3.10,<3.12"

    https://python-poetry.org/docs/dependency-specification/#python-restricted-dependencies,
    https://python-poetry.org/docs/dependency-specification/#using-environment-markers

エラー内容にもある通り、次のようにpyproject.tomlを設定した再度インストールしたらら、なおった。

1
2
[tool.poetry.dependencies]
python = ">=3.10,<3.12"
  • これはpyprojectのpythonとunstructuredのpythonのバージョン制約がマッチしなかったらら
  • pythonのバージョン制約
    • pyproject
      • (>=3.10,<4.0)
    • unstructured
      • (<3.12,>=3.9.0)
  • 既にpython3.10が入っていたので、大本のpythonバージョンの制約を(>=3.10,<3.12)に変えればOKだった

参考文献

Built with Hugo
テーマ StackJimmy によって設計されています。