Pythonの仮想環境を含むディレクトリを、Dropboxを使って複数マシン間 (macOS, Linux etc.) で同期している場合に、役立つかもしれないメモです。
Pythonの仮想環境 (venv) を含むディレクトリを、Dropboxで特に特別扱いせずに同期すると、Dropboxの同期動作が遅くなることに気づきます。これはなぜなら、仮想環境には多数のファイルが存在するためです。さらに、Pythonの仮想環境の中身はPythonのバージョンやCPUアーキテクチャ (arm64, amd64 etc.) によって異なる可能性があり、これらは複数マシン間で同期せずに、各々のマシン専用のディレクトリとしておくほうが都合が良いはずです。
ということで、CLI上でPythonの仮想環境 (venv) を扱う際に、無意識的に、仮想環境を含むディレクトリをDropboxの同期対象外にする一つの方法をメモしておきます。
私の場合はmacOSでもLinuxでもシェルとしてbashを利用しているので、.bash_aliases
に次のような変数とaliasを定義しています。
## OSの種類を特定
if [ "$(uname)" == 'Darwin' ]; then
OS='Mac'
elif [ "$(uname -o)" == 'Android' ]; then
OS='Android'
elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
OS='Linux'
else
OS='unknown'
fi
## Python venv関係のaliasを設定
if [ ${OS} = 'Mac' ]; then
alias venv-make='python3 -m venv venv && xattr -w com.dropbox.ignored 1 venv'
alias venv-in='source venv/bin/activate'
alias venv-out='deactivate'
elif [ ${OS} = 'Linux' ]; then
alias venv-make='python3 -m venv venv && attr -s com.dropbox.ignored -V 1 venv'
alias venv-in='source venv/bin/activate'
alias venv-out='deactivate'
fi
alias venv-make
の右辺で用いている、OSごとのxattr, attrコマンドが今回の味噌です。Dropboxサイトの次のページを参考にしています。
Pythonのプログラム開発を仮想環境を用いて行う際には、次の手順で進めます。Dropboxの同期に関する拡張属性を変更するコマンドの、OSごとの違いはalias定義で吸収しているので、Dropboxの同期対象外にしたvenvを扱う手順はmacOSとLinuxとで共通化できます。
## 移動する
cd /path/to/python-project
## (初回のみ) 仮想環境用のvenvディレクトリを作成し、かつそれをDropboxの同期対象外に設定する
venv-make
## 仮想環境に入る
venv-in
## 仮想環境へモジュールをインストールする
pip install -r ./requirements.txt
## Pythonスクリプトを実行したりデバッグしたり
python ./foobar.py
vim ./foobar.py
## 仮想環境から出る
venv-out