背景
- Pythonでプロジェクトを始めるときにいつも実行するコマンドがある
- ただ時々忘れるし、コピペですましたいのでメモとして残す
前提
必要なパッケージ
予め、次のCLIを入れて、Pathを通しておく必要がある。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| $ 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
$ pip show pip-tools | grep Version
Version: 7.4.1
|
他にも、有名どころでは、Pipenvやpip-toolsがあるが、使用している環境に合わせて利用する。
開発環境について
大きく次の3つのパターンがある。
なお、venvとvirtualenvはpythonのバージョン管理ツールは含まれないため、
pyenvも併用する必要がある。
- venv
- Python 3.3 以降の標準ライブラリ
python -m venv
コマンドで利用が可能
- virtualenv
- venvよりも高機能な仮想環境を作る外部パッケージ
- poetryは内部でvirtualenvを使っている
- anaconda
- Pythonの環境管理ツール
- pyenv + virtualenvを内包したようなツール
venvとvirtualenvは似ているが実は違うパッケージなので用語の混合に注意。
pyenv
pythonのインストール
次のようにpythonのバージョンを指定してインストールする。
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
|
利用方法は次のコマンド。
これでpythonのPATHとVersionが変更される。
1
2
3
4
5
| $ which python
/home/mike/workspace/xxx/.venv/bin/python
$ python --version
Python 3.9.5
|
ない場合はインストールする。
venvを使う場合
環境の作成
まず、次で、.venvフォルダを生成する。
環境の削除
削除は以下。
環境の有効化
その後activateする(使用しているshellによってファイルが違う)。
1
| $ source .venv/bin/activate
|
windowsの場合は以下。
1
| $ .venv\Scripts\activate.ps1
|
Fishの場合は以下。
1
| $ source .venv/bin/activate.fish
|
環境の無効化
disactivateの方法は次。
poetryを使う場合 (virtualenv)
virtualenvの環境の初期設定
pyproject.tomlがない場合は次で生成する。
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の環境の削除
環境の削除は以下。
poetryでのパッケージの追加と削除
パッケージをインストールするには次を使う。
1
2
| $ poetry add xxx
$ poetry remove xxx
|
poetryでバージョンの更新
パッケージのバージョンを更新する時は次を使う。
poetryでrequirements.txtの作成
次のコマンドを利用して作成する。
1
| $ poetry export -f requirements.txt > requirements.txt
|
poetryでバージョンの確認
次のコマンドでバージョンの確認を行う。
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
|
環境の有効化
アクティベーションは次のコマンドを使用する。
環境の無効化
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 でバージョンの確認
次のコマンドでバージョンの確認を行う。
pipの鉄板コマンド
以下のコマンドはpipを使う上で、鉄板のコマンド。
1
2
| $ pip install -U pip
$ pip install -U setuptools
|
一辺にバージョンを上げるには次の方法を使う。
1
2
3
| $ pip freeze | sed -E 's/==.*//g' > requirements.in
$ pip-compile --upgrade
$ pip install -r requirements.txt
|
これで、依存関係の整合性を保ちながらupgradeができる。
sedでバージョンを抜いている。
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
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のバージョン制約
- 既にpython3.10が入っていたので、大本のpythonバージョンの制約を(>=3.10,<3.12)に変えればOKだった
pytestのwarningを非表示化
poetry.tomlに次を足してwarningを消せる。
1
2
| [tool.pytest.ini_options]
filterwarnings = ["ignore::DeprecationWarning"]
|
参考文献