python環境(pyenv + direnv)

(最近はpyenv + direnv ではなく pipenv + direnv (layout pipenv)を使用。poetryやpyflowは様子見中)

pyenv嫌われな記事があったりするけど、pythonのバージョンいろいろ使うならpyenvがやっぱり便利と思う。環境切り替えとしてanacondaは使ったことないです。

主に pyenv + direnv な構成にしてます。macOSだとhomebrewのpyenv-virtualenvのままにしている環境もあります。
最近zshへ移行中だけれどサーバセットアップ前提のためbashで。

pyenv

いろんなpythonをビルドでき、簡単に切り替えられる。

pyenv導入

CentOSでやるイメージで。まず導入。バージョンによって-devは-develかも。

sudo dnf group install -y "Development Tools" zlib-dev bzip2-dev sqlite-dev openssl-dev readline-dev
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
exec "$SHELL" -l

pyenvでpythonをインストール

好きなpythonをインストール。(3.8.1)

pyenv install -l
pyenv install 3.8.1
pyenv versions

direnv を使わないのであれば、 pyenv local 3.8.1 として切り替え。 .python_version が生成されて、以降、ディレクトリに入ると自動切り替え。

pyenv + venv (使っていない)

pyenvでpythonのバージョンは切り替えられるが、プロジェクト毎にlibなどを分けることはできない。venvはpython3で virtualenvが標準機能になったもの。名前がvenvだとどのvenv環境にいるのか切り替わってるかわからないのでプロジェクト名で作成。

cd prjDir
pyenv local 3.8.1  # 初回のみ
python -m venv prjName
#python -m venv --clear prjName  # 初期化する場合。rmしてもいいけど。

prjName ディレクトリが出来る。切り替えは prjName/bin/activate 戻す時は deactivate を実行。つくるのも面倒くさいが切り替えはさらに面倒臭い。

pyenv + direnv

pyenvのpythonバージョンを使用して.direnvディレクトリ下で環境を分ける(direnvが.direnv下にvenvを作ってくれる)。direnv は環境変数などを自動切り替えできて超便利。 バイナリインストール じゃない場合、go製なのでgoでビルド。導入。

direnv導入(コンパイル)

sudo dnf install -y go go-md2man
git clone https://github.com/direnv/direnv
cd direnv
sudo make install
echo 'export EDITOR=vim' >> ~/.bash_profile
echo -e 'if command -v direnv 1>/dev/null 2>&1; then\n  eval "$(direnv hook bash)"\nfi' >> ~/.bash_profile
exec "$SHELL" -l

pyenv + direnvでpythonと環境を切り替え

direnvを使ってプロジェクトディレクトリに出入りした時に自動でpyenvのpython versionと環境を切り替え( .python-version は不要。venvもdirenvが自動実行)。

cd prjDir
direnv edit .
+layout pyenv 3.8.1
direnv allow

.envrc ファイルと .direnv ディレクトリが生成され、以降、prjDirに入ればpyenvのpythonバージョンと$VIRTUAL_ENVが自動で切り替わり、抜けると元に戻る。

pyenv + direnv の良いところ

.envrc 1行だけの設定で、ディレクトリ出入りでpython versionと環境が切り替えられる (pyenv localやvenvの手動設定不要) !

# 手順おさらい
# prjAでpython 3.8.1を使う(未インストール)
pyenv install 3.8.1
mkdir ~/prjA;cd ~/prjA
direnv edit .
+layout pyenv 3.8.1
direnv allow
# prjBでも3.8.1を使う
mkdir ~/prjB;cd ~/prjB
direnv edit .
+layout pyenv 3.8.1
direnv allow
# prjCではpython 3.7.5を使う(未インストール)
pyenv install 3.7.5
mkdir ~/prjC;cd ~/prjC
direnv edit .
+layout pyenv 3.7.5
direnv allow

appendix

他のpython環境ツールでも direnv 便利。https://github.com/direnv/direnv/wiki/Python
詳しくは stdlib.sh をみると良し。Rubyとか他の言語でも。(env系の発祥はrbenvだとか)

dockerで環境分けるという手も…。

kernel_taskがCPUリソースを激しく消費してMacの動作がとても重くなる場合の対処

ActivityMonitor

症状

  • Macの動作がとても遅い
  • アクティビティモニタをみるとkernel_taskがCPUリソースを喰い潰している

環境

  • MacBook Pro 13inch 13-inch Early 2011
  • バッテリーが使用できなくなっている(経年劣化?)

対処

ACPI_SMC_PlatformPlugin.kextのplistを削除(移動)し、再起動する

参考元と同様、at your own riskで。

I take absolutely no responsibility for any damage or loss caused to you or your property, you do this of your own free will.

$ cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources
$ system_profiler -detailLevel mini|grep "Model Identifier" | awk '{print $3}'
MacBookPro8,1
$ sudo mv [上の結果] ~
$ sudo reboot

問題なく動作したならHomeディレクトリに移動させたplistは削除して良いはずです。

El Capitanで症例報告あるのかわかりませんが、El Capitanではsudoでも消せないので上記をそのまま実行では対応できないと思います。

refs

Thank God, It’s Friday. #2

IMG_2537

会社のまったり発表会、のみくいしながら、みたいなもの。

Themes

  • 「FP法による簡単見積もり入門」
  • 「“Gulp”と“BrowserSync”によるWeb制作タスクの自動化」

ちゃんと理解できてないので復習してから、
個人的にまとめ直せたら更新致しまする。

内部情報出さない範囲で。

イベントがあると更新が楽でいいな。
しかし早いうちに復習しておかないと。

iTunes Card バリアブル買ってきた

IMG_446679243

レジで金額を自分で決めれられること以外、固定金額のiTunes Cardと変わらないので、特に何もないけれど。

1円単位で指定できるので、個人取引での支払いとかに使えるかもしれない。

IMG_446679381

このカメラでのコード認識は何度やってもカッコイイ。


愛するローソンで最大10%増額キャンペーン中。
range(5000, 50001, 5000)の金額で買えば10%の金額があとから貰えるらしい。要応募フォームからの応募。

CodeをiTunesでカメラから読み込んだのにこの応募のためにCardの番号を手入力しないといけない哀しみ。


ブログとSNS(Facebook, twitter)の連携をWP Jetpackのパブリサイズ共有でやろうとしたのですが、
facebookにタイトルとリンクだけ流すのをどう設定すれば良いのかわからないのと、
ルールを設定できなさそうなのでIFTTTでの連携にしました。

WordPressのactivateは出来たのにcheckさせるとエラーになっていたので、
RSSから取得してます。

Screen Shot 2015-02-27 at 07.45.10

post(のタグをイメージ)にiftttpostを含むものを自動でfbとtwitterに流してます。(上はfbのレシピ)

というこの記事自体が動作テストです。


WordPressの記事はmarkdownで書いているのですが、
改行するとbrタグが挿入されている…。

ということで、PS Disable Auto Formattingというプラグイン入れたら直りました。

markdownのプラグインは”Markdown on Save Improved”使っているのですが、
Deprecatedとなっていて、Jetpack pluginを使ってね!
とのことなのでバックアップとってから移行予定です。

Jetpack markdownにしたら”PS Disable Auto Formatting”不要だったりして。

OSX Mail.app で新着メール音声を変更する

Mail

FaceTimeつないで音声流しっぱなしで作業してたら、
メール受信のたびにこっちで誰かしゃべるのを驚かれたようなので。

音声ファイル用意すれば簡単に設定できまする。

予期せぬ作業発生のため、やっつけなブログ記事になってしまった。
(いつもどおり)

MarvericsのままにしていたiMacをYosemiteにしたら、
Yosemite対応版のAquaSKKじゃないとうまく動かない、ということを思い出した。
さっさと入れないと何も出来ない。Yosemite対応感謝です。

おおっ、新しくなって入力モードのアイコンが美しくなっている!

気になる方はぜひAquaSKK使いに。
常に勧誘してます。

んん? Java for OS X 2014-001ここに行ってJavaを入れろというから
行こうとしたらブラウザ画面真っ白だ。

I fixed this for myself by going into the preferences, privacy. Then under “cookies and website data” I clicked “details” – searched for apple.com and delete their cookies. Then it worked!
Safari will not display support.apple.com/kb/DL… | Apple Support Communities

僕もこれで直りました。

GitLab Omnibus packageのGroup milestoneでの500エラー

500

お昼にGitLab Omnibus packageを7.8.0にupgradeしたせいかは不明ですが、
Groupのmilestone画面で500 errorが発生。

エラーログはこんなの。

Started GET "/groups/o/milestones" for 210.191.219.194 at 2015-02-24 18:48:52 +0900
Processing by Groups::MilestonesController#index as HTML
  Parameters: {"group_id"=>"o"}
Completed 500 Internal Server Error in 50ms

ActionView::Template::Error (No route matches {:action=>"show", :controller=>"groups/milestones", :format=>nil, :group_id=>#<Group id: 7, name: "o", path: "o", owner_id: nil, created_at: "2015-02-10 09:19:11", updated_at: "2015-02-19 09:19:09", type: "Group", description: "o", avatar: "2015-01-01_16.27.21.jpg">, :id=>"", :title=>"証明書作成"} missing required keys: [:id]):
           :
           :

ググる。あった。

その通りやってみる。

# vim /opt/gitlab/embedded/service/gitlab-rails/app/models/group_milestone.rb
-    @title.parameterize
+    URI::encode(@title)

再起動。

おお、直った。ありがたい。

milestoneのtitleがmultibyte文字のみの場合、@title.parameterizeがemptyとなるのが原因とのこと。

ということは前から出てたんだな。

Apple Magic MouseをWindowsで使う

IMG_446472469-1

結構つまづいたので書いておく。

  • Windows7 64bit
  • Apple Magic Mouse
  • PLANEX BT-Micro4

Windows用ドライバを入手

もう公式で配布していないようなので、AppleWirelessMouse64.exeで検索するとかして入手。
インストールする。

Bluetoothアダプタをセッティング

内蔵しているなら苦労はなさそう。アダプタの場合、モノによってはそのままじゃ動かない。

BT-Micro4についてきたBluetoothドライバをいれてペアリングすると、
2ボタンマウスとして使用はできるものの、スクロールができなかったので、
入れたBluetoothドライバを削除して、Windowsが自動で入れるドライバを使用。
すると、最初はマウスを見つけることさえできない。

デバイスマネージャからCSR Bluetooth Chipのドライバの更新を選択し、
コンピューター上のデバイスドライバの一覧からGeneric Bluetooth Adapterに更新。

ペアリング

デバイスとプリンターでデバイスの追加をし、
ペアリング(0000)するとスクロールも使えるようになった。

めでたしめでたし。

MAMPでgitweb動かしたけどやりたいことと違った

MAMP卒業しよう、と言っているのにMAMPで記事を書く。

VirtualHost使えよってところだけど、ScriptAriasでやる。

おまけに今回、目的を果たせなかった。

ということで役に立たない内容かと思いますが、とりあえず。 続きを読む MAMPでgitweb動かしたけどやりたいことと違った

wri.peが素晴し過ぎる

untitled

wri.pe – simple and smart notepad

理想のノート

これまで、”どこでも参照、編集できるノート”の手段として、
Simplenote, Dropboxでのtextファイル同期, Evernoteなどを利用してきました。

しかし、Evernoteでは、意図せずフォーマットが変わる(というかフォーマットがついちゃう)のが嫌で使わなくなり、Dropboxでは、同期しているローカルファイルの内容が全ての環境で変わる(というかそれを同期と呼ぶのだが)、のが気分が良くありませんでした。で、Simplenoteを使っていたのですが、悪くないけど…くらいの気分でした。しかも結局はクライアントアプリでローカルファイルに落として同期…ってカタチだったし。

今の時代、ノートを取るような状況では通常インターネットに繋がるので、ノートはWebアプリケーションで提供されていた方がありがたい。

Webアプリケーション内で利用が完結されていれば、ローカルにファイルを作ることもないし、データ同期トラブルもない。必要なのはブラウザだけという手軽さ。アプリを選ぶ必要も環境設定をいちいちする手間もない。いつでもどこでも何を使っても良い。素敵!

で、なんか前置きがあった方が文章らしい気がしたので、意味なくたらたら書いてしまったけど、素晴らしいweb noteがありますよ!ということです!

続きを読む wri.peが素晴し過ぎる