Hatena::ブログ(Diary)
ブログトップ 記事一覧 ログイン 無料ブログ開設

コードで気楽な日々を このページをアンテナに追加 RSSフィード

2012-07-05

仮想環境を使った、色んな条件でのPythonの手続き

PythonもといDjangoの開発にて、予想以上に色々と環境面で初めて知る事がおおかった。Perlライブラリインスパイアされたものとかもあって、色々影響しあってるんだなぁと。

VirtualEnvをいれる

プロジェクト毎に環境を変えたい場合に必須。cpanm+local::libみたいなもん。

pip install virtualenv
pip install virtualenvwrapper

PythonBrewで複数バージョンを管理する

curl -kLO https://github.com/utahta/pythonbrew/raw/master/pythonbrew-install
chmod +x pythonbrew-install
./pythonbrew-install

#環境上いれられないバージョンの場合、installを実行した際に蹴られる
pythonbrew install 2.7.2
pythonbrew switch 2.7.2

なおPythonBrewで蹴られても、homebrewからは入れることができたりする。

VirtualEnvで、アプリ毎に環境を作る

virtualenvwrapperのコマンドを使えるようにする。virtualenvwrapperを入れても、通常ここらへんはノーヒントだったきがする。pythonbrewからいれた場合。

vim ~/.zshrc

export VIRTUALENVWRAPPER_PYTHON=$HOME/.pythonbrew/pythons/Python-2.7.2/bin/python
source $HOME/.pythonbrew/pythons/Python-2.7.2/bin/virtualenvwrapper.sh

#.zshrcを保存後に実行
mkvirtualenv -p /path/to/python-2.6 foo #python2.6ベースで、fooという環境を作成
workon foo
workonで転ける場合。
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python2.5/site-packages/virtualenvwrapper/hook_loader.py", line 22
    prevumask = os.umask(0o002)
                             ^

なんて出てきたら、virtualenvwrapperのバージョンを縛る。

pip install virtualenvwrapper==2.0.2

Pythonのバージョンに併せたpip

普通にpipすると、環境で指定されてるpythonのバージョンで入る。

python --version

バージョンを確認しておけばいいのだけれど、心配な場合に。

#python2.5に合わせたpip installを行う
easy_install-2.5 pip
pip-2.5 install Django

参考

2012-06-21

Pythonで開発してる会社に入ることにした

Pythonで開発業務を行っている会社へ入社することにした。7/1入社予定。前々職に入社する前と同じように、郵便で届いた山のような書類を延々と読み返してる最中。

  • Perl以外のLLでの仕事経験を積みたい
    • Perlでしか仕事できない状態だったらやばい
  • 朝もうちょっとゆっくりしたい
    • ラッシュつかれた
  • LAMPで開発してる会社に戻りたい
    • vimでコードがりがり書きたいとか
  • Unix系ツールの会話ネタ振りが通じる会社に戻りたい
    • 俺のvimrcが火を吹くぜ、的な

という辺りの思惑がマッチした。それと、実家に地理的に割とアクセスがしやすい所にもオフィスを構えてる会社だった、という想定外の要素があったので、皮算用ながらも将来的に…という考え。

Pythonを選んだ理由は、WSGIPSGIインスパイア元だとか、rubyのバージョン周りに苦手意識あったとか、phpは正直仕事で触りたくない、とかそんなところ。

あと、前会社と違ってモバマス(もといソシャゲ)がdisられないどころか、モバマスPがうようよしてる職場らしいので、ほっとしてる。

2012-06-14

Djangoの触り始め

Perl以外もさわってみようと、PythonDjangoを触れてみることにした。

Pythonについて細かくは知らないこともあり、一通りの手続きをメモ。

wget -O Django-1.4.tar.gz https://www.djangoproject.com/download/1.4/tarball/ 
tar xvfz Django-1.4.tar.gz
cd Django-1.4
sudo python setup.py install

新規プロジェクト作成

django-admin.py startproject mysite
cd mysite
python manage.py runserver

2012-06-10

ImageMagickで一括画像変換の記録

個人サイトで配布してる素材がgifになっていたんだけれど、bmp形式に変換してのzip archive配布にしたくて、シェルスクリプト叩いたら一旦コピーしてbmpに変換した上にarchive化、というのを目論んでみた。

homebrew + imagemagick + cpanm + Image::Magickで、メンテナンス用にperlスクリプトを書こうと試みたところ、シェルスクリプトに落ち着いた過程を以下に。画像変換が鬼門だった。

CPANからImage::Magickを導入(使わなかったけれど)

homebrew経由にてimagemagickを入れた後で、cpanmからImage::Magickを入れる際にどうしても転ける。

Note (probably harmless): No library found for -lperl

理由としてはパスが通っていなかっただけのこと。でも、パスを確認してみたら、何故かあるべきはずのCOREディレクトリがなかった。仕方なくPerl自体を入れ直し。

perlbrew install perl-5.16.0
perlbrew switch perl-5.16.0

再びImage::Magickを入れる。Makefile.PLを一部修正して、COREディレクトリを通す。

cpanm --look Image::Magick
vim Makefile.PL

my $LIBS_magick = '-L/Users/haoyayoi/perl5/perlbrew/perls/perl-5.16.0/lib/5.16.0/darwin-2level/CORE -lMagickCore -lperl -lm';

とりあえずこれで通ったけど、use Image::Magickするとsegmentation fault。ぐぐってみたところ、homebrewImageMagickを入れるときに--disable-openmpを渡すとよいらしい、とあったので試したところ変わらず。

これを解決しようとフラグを確認したり、バージョンを確認したりで、結果丸一日くらい使ってたけど、別にPerlMagick経由しなくてもいいんじゃね、って思ったところでやめた。

convertによる変換

wrapper使って苦しむのはどうも微妙な気がしたので、試しにImageMagickのconvertを使ってみた。

最初は以下の感じでトライ。が、出来上がったのは0バイトのbmp

convert a.gif a.bmp 

どうやら目的のbmpファイルの構成上、bmp3:と指定を付けないとダメらしい。(参考:ImageMagick で bmp に変換するときは「bmp3」てのを指定しないとダメらしい)

最終的に、こんな感じに落ち着いた。

for file in $(ls *.gif)
do
    convert $file bmp3:`echo $file | sed 's/gif/bmp/'`
done

正直なところ、シェルスクリプトの書き方がどこまでフリーダムに行けるのか理解してなくて、この書き方もありなのか、と。

2012-04-23

さくらVPSでサイト運用を手っ取り早くやってみた

さくらVPSのリニューアルプランに乗り換えたついでに、サイト作り直した上で、今まで放置してた運用環境の整理にも手をつけることにした。

以下の組み合わせを使った上で、git pushにてhookさせてdaemon再起動とかも目論む。

  • nginx
  • supervisor

daemontoolsを使おうと試してたけど、色々面倒になってsupervisorにした。

gitのリモートリポジトリ設置

内容としては以前書いたこの記事と殆ど変わらない。

#git user 追加
adduser git
passwd git
su - git
#リモートのリポジトリ設置
mkdir -p repos/WebSite.git
cd repos/WebSite.git
git init --bare

ローカルからサイト用のデータをpush

軽めでいいのでAmon2::Liteに。

amon2-setup.pl WebSite --flavor=Lite
cd WebSite
git commit -v
git remote add origin git@xxx.xxx.xxx:repos/WebSite.git
git push origin master

nginxをいれる

aptitude install nginx
vim /etc/nginx/nginx.conf

nginx内の設定は、静的ファイルについてはそのまま渡す形にした。

http {
    server {
        server_name  xxx.xxx.xxx;
        location / {
               proxy_pass http://127.0.0.1:9002;
        }

        location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
            root  /home/git/www/WebSite/;
            index index.html;
            ssi   on;
            break;
        }
    }

supervisorを導入する

supervisorのcommandから呼び出すスクリプトgit pushで更新するため、リポジトリの中に含めておく。

#!/bin/sh
exec 2>&1
exec /home/git/perl5/perlbrew/perls/perl-5.12.4/bin/start_server --port=9002 -- \
/home/git/perl5/perlbrew/perls/perl-5.12.4/bin/plackup -s Starlet \
--max-workers=10 \
--max-keepalive-reqs=1 \
--max-reqs-per-child=10000 \
-a /home/git/www/WebSite/app.psgi

supervisorの導入。

su -
aptitude install supervisor
vim /etc/supervisord.conf

;[unix_http_server]
;file=/tmp/supervisor.sock   ; (the path to the socket file)
[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)

supervisorの設定ファイル。

  • /etc/supervisord.d/webroot.ini
[program:webroot]
user=git
command=/home/git/www/WebSite/webroot/run
redirect_stderr=true
stdout_logfile=/var/log/supervisor/webroot.log
stdout_logfile_maxbytes = 10MB
stdout_logfile_backups = 5
autostart = true
autorestart = true
startsecs = 5

サービス化させる。

supervisorctl reread
supervisorctl add webroot

一通りここまでやってbind時にAddress already useと出てた。ぐぐってみたところipv6周りが原因らしい。無効にしてみたところ正常動作。

supervisorctl status
webroot                          RUNNING  

hook用スクリプトを更新

とりあえずこんなものでいいかな、という具合に。

  • hook/post-receive
cd /home/git/www/WebSite;git --git-dir=.git pull;
/bin/chown git:git /home/git/www/WebSite/webroot/run;
/usr/local/bin/supervisorctl stop webroot;
/usr/local/bin/supervisorctl start webroot;

監視もいれたいなーと思いつつも、とりあえずはこれでいいかという気分になったのでこのくらいで。

参考URL