1. 背景Pythonでプロジェクトを始めるときにいつも実行するコマンドがある ただ時々忘れるし、コピペですましたいのでメモとして残す 2. 前提2.1. 必要なパッケージ予め、次の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
Copy 他にも、有名どころでは、Pipenvやpip-toolsがあるが、使用している環境に合わせて利用する。
2.2. 開発環境について大きく次の3つのパターンがある。
なお、venvとvirtualenvはpythonのバージョン管理ツールは含まれないため、
pyenvも併用する必要がある。
venvPython 3.3 以降の標準ライブラリ python -m venv
コマンドで利用が可能 virtualenvvenvよりも高機能な仮想環境を作る外部パッケージ poetryは内部でvirtualenvを使っている anacondaPythonの環境管理ツール pyenv + virtualenvを内包したようなツール venvとvirtualenvは似ているが実は違うパッケージなので用語の混合に注意。
3. pyenv3.1. pythonのインストール次のようにpythonのバージョンを指定してインストールする。
3.2. 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
Copy 利用方法は次のコマンド。
これでpythonのPATHとVersionが変更される。
1
2
3
4
5
$ which python
/home/mike/workspace/xxx/.venv/bin/python
$ python --version
Python 3.9.5
Copy ない場合はインストールする。
4. venvを使う場合4.1. 環境の作成まず、次で、.venvフォルダを生成する。
4.2. 環境の削除削除は以下。
4.3. 環境の有効化その後activateする(使用しているshellによってファイルが違う)。
1
$ source .venv/bin/activate
Copy windowsの場合は以下。
1
$ .venv\Scripts\activate.ps1
Copy Fishの場合は以下。
1
$ source .venv/bin/activate.fish
Copy 4.4. 環境の無効化disactivateの方法は次。
5. poetryを使う場合 (virtualenv)5.1. virtualenvの環境の初期設定pyproject.tomlがない場合は次で生成する。
5.2. virtualenvの環境の作成と有効化ある場合は次でshellに入る。--python
でpythonを指定できる。
1
$ poetry shell --python=$(which python)
Copy なお、poetry shellした際に、pythonのバージョンが違う場合は、次のコマンドで直す。
1
2
3
4
$ exit # 一旦poetry shellから抜ける
$ python --version
3.9.5
$ poetry env use $(which python)
Copy 上記はpyenvで入れた3.9.5をlocalで使い、それをpoetry shellで利用する例。
5.3. virtualenvの環境の削除環境の削除は以下。
5.4. poetryでのパッケージの追加と削除パッケージをインストールするには次を使う。
1
2
$ poetry add xxx
$ poetry remove xxx
Copy 5.5. poetryでバージョンの更新パッケージのバージョンを更新する時は次を使う。
5.6. poetryでrequirements.txtの作成次のコマンドを利用して作成する。
1
$ poetry export -f requirements.txt > requirements.txt
Copy 5.7. poetryでバージョンの確認次のコマンドでバージョンの確認を行う。
5.8. 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
Copy 5.9. 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
Copy 5.10. poetry new vs. poetry init違いは次の通り。
poetry new poetry initpyproject.tomlを生成する為に使う 既存のプロジェクトに Poetry のサポートを追加するために使用する 6. condaを使うパターン6.1. 環境の一覧まずenvの一覧を確認する。
1
2
3
4
5
6
$ conda env list
# conda environments:
#
base /home/mike/anaconda3
graphtsr /home/mike/anaconda3/envs/xxx
Copy 6.2. 環境の作成と削除シンプルに次のコマンドで環境を作る。
python=xxxでpythonのバージョンの指定も可能。
1
$ conda create --name myenv python=3.6
Copy 削除は以下。
1
$ conda env remove --name graphtsr
Copy 6.3. 環境の有効化アクティベーションは次のコマンドを使用する。
6.4. 環境の無効化deactivateは次となる。
6.5. 環境の保存環境のoutputは次のコマンドを利用する。
1
$ conda env export > myenv.yaml
Copy このyamlさえあれば、別の環境でも再現ができる。
1
$ conda env create --file myenv.yaml
Copy 6.6. パッケージの追加と削除パッケージをインストールするには次を使う。
1
2
$ conda install xxx
$ conda uninstall xxx
Copy 7. pip7.1. パッケージの追加と削除パッケージをインストールするには次を使う。
1
2
$ pip install xxx
$ pip uninstall xxx
Copy 7.2. インストール済みパッケージの保存環境を保存するには次のコマンドを利用する。
1
$ pip freeze > requirements.txt
Copy 7.3. パッケージの一括インストールfreezeしたパッケージのインストールは次を使う。
1
$ pip install -r requirements.txt
Copy 7.4. pip でバージョンの確認次のコマンドでバージョンの確認を行う。
7.5. pipの鉄板コマンド以下のコマンドはpipを使う上で、鉄板のコマンド。
1
2
$ pip install -U pip
$ pip install -U setuptools
Copy 一辺にバージョンを上げるには次の方法を使う。
1
2
3
$ pip freeze | sed -E 's/==.*//g' > requirements.in
$ pip-compile --upgrade
$ pip install -r requirements.txt
Copy これで、依存関係の整合性を保ちながらupgradeができる。 sedでバージョンを抜いている。
7.7. 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
Copy その後installする。
1
2
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
Copy 7.8. pre-commitをcommitせずに適用commitせずにpre-commitを走らせたい場合は、次のコマンドを利用する。
1
$ pre-commit run --all-files
Copy 8. その他8.1. 環境変数の読み込み例として、次のようなDjangoの.env
ファイルを用意する。
1
2
3
DJANGO_SETTINGS_MODULE = mysite.settings_dev
DJANGO_SUPERUSER_USERNAME = admin
DJANGO_SUPERUSER_PASSWORD = admin
Copy その後、env.sh
を容易する。
1
2
3
#!/bin/bash
export $( cat .env | grep -v "#" )
Copy これを現在のshellで読み込む。
次のように、環境変数が読み込まれているか確認できる。
1
2
3
4
$ env | grep DJANGO
DJANGO_SUPERUSER_PASSWORD = admin
DJANGO_SETTINGS_MODULE = mysite.settings_dev
DJANGO_SUPERUSER_USERNAME = admin
Copy 8.2. .gitignoregitignoreはgitignore/Python.gitignore at main · github/gitignore を参照にする。
8.3. poetryのおすすめの設定総じて、parallelとvirtualenvをin-projectで作るのはおすすめ。
1
2
3
4
$ poetry config --list
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = true
Copy 8.4. packageがyankedされた場合yankedされたパッケージとは、いわゆる壊れたパッケージの事 パッケージがyankedされたパッケージを使いたい場合は、versionを指定してインストールする see PEP 592 8.5. $VIRTUAL_ENVとは仮想環境がアクティベートされると、VIRTUAL_ENV 環境変数の値が仮想環境へのパスに設定される。
1
2
$ echo $VIRTUAL_ENV
/home/mike/playground/xxx/.venv
Copy 8.6. pythonのversionによる問題の解決次のようなpyproject.tomlで、
1
2
[ tool . poetry . dependencies ]
python = ">=3.10"
Copy 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
Copy エラー内容にもある通り、次のようにpyproject.tomlを設定した再度インストールしたらら、なおった。
1
2
[ tool . poetry . dependencies ]
python = ">=3.10,<3.12"
Copy これはpyprojectのpythonとunstructuredのpythonのバージョン制約がマッチしなかったらら pythonのバージョン制約 既にpython3.10が入っていたので、大本のpythonバージョンの制約を(>=3.10,<3.12)に変えればOKだった 8.7. pytestのwarningを非表示化poetry.tomlに次を足してwarningを消せる。
1
2
[ tool . pytest . ini_options ]
filterwarnings = [ "ignore::DeprecationWarning" ]
Copy 9. 参考文献