PyCharm を使って仮想環境に Pyramid プロジェクトを作成する...?

More than 1 year has passed since last update.

これまでのあらすじ

諸事情により最近 Android Studio を使っているので、ついでに Python の開発環境も PyCharm にしてみようと思った。普段は packer で作った VirtualBox の仮想環境に入って Vim 使ってる。

環境

ホスト: Mac OS X 10.9.2
ゲスト: Ubuntu 14.04 LTS
PyCharm: 3.4

ゲストは shiguredo/packer-templates で作ったあと vagrant ユーザーじゃなくて新たにユーザー (drillbits) を作って vagrant ssh じゃなくて普通に ssh ログインできるようにしてある。

あと apt で入る Python3.4 には ensurepip ないので普通にビルドしてある。

PyCharm のインストール

はい http://www.jetbrains.com/pycharm/

ホストに作業環境作る

ローカルにもそれなりの環境作らないといけない。

Python3.4 のインストール

.dmg あるけど homebrew 使ってると相性悪いっぽいので、Python も brew install する。

$ brew update
$ brew install python3
$ python3 -V
Python 3.4.0

PyCharm でプロジェクト作成

プロジェクト用のディレクトリ作っておく

適当に。

$ mkdir -p ~/dev/sushiapp

venv の作成

PyCharm 起動して Create New Project を選択。

pycharm_create_new_project.png

Interpreter の右の ... から Python Interpreters を開いて、ヘビさんマークから Create Virtual Environment する。

pycharm_make_virtualenv.png

Base interpreter が Python3.4 なら、ちゃんと virtualenv じゃなくて pyvenv を使ってくれるっぽい。やりましたね。

あとはできあがった interpreter を使って Pyramid Project を作る。

仮想環境と同期する

コードは、仮想環境のディレクトリを直接参照するのではなくて、単純にファイルをアップロードして同期する。

Vagrant の設定

Configure > Preferences > Vagrant

pycharm_preference_vagrant.png

これだけ設定する。仮想環境は bebe っていう名前で /Users/drillbits/vagrant/bebe に VagrantFile がある。

同期の設定

Tools > Deployment > Configuration...

+ ボタン押して Add Server する。今回は Name: bebe, Type: SFTP で。bebe はホストオンリーアダプターで 192.168.33.10 に ssh ログインする感じ。接続テストもできて便利。

pycharm_deployment_server.png

あと Connection 以外にも Mappings, Excluded Paths の設定も必要。

Mappings

  • Local path: /Users/drillbits/dev/sushiapp
  • Development path on server 'bebe': /home/drillbits/dev/sushiapp

Excluded Paths

venv のディレクトリは同期したくない (Python 入ってるパスとか違う) ので除外する。

  • /Users/drillbits/dev/sushiapp/env

これであとは Tools > Deployment > Configuration の Automatic Upload にチェックしておくだけでいい感じにアップロードしてくれる。

仮想環境の venv 作成

PyCharm からはできないっぽいので ssh login して直接作る。

$ cd ~/dev/sushiapp
$ pyvenv-3.4 env

Pyramid プロジェクトのセットアップ

pcreate 使わないマンなので普通に setup.py などを書いたりモジュールを配置したりする。とりあえず最低限。

setup.py
from setuptools import setup, find_packages

install_requires = [
    'pyramid',
    'waitress',
]

setup(
    name='sushiapp',
    version='0.0',
    packages=find_packages(),
    install_requires=install_requires,
    entry_points="""\
    [paste.app_factory]
    main = sushiapp:main
    """,
)
development.ini
[app:main]
use = egg:sushiapp

pyramid.reload_templates = true

[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 5000

ここで通常ならコマンドラインで python setup.py develop するところを PyCharm の Run/Debug で行えるようにする。

Remote interpreter 追加

setup.py は仮想環境内で実行されてほしいので Remote Interpreter を追加する。

Preferences > Project Interpreter > Python Interpreters

+ ボタン押して Select Interpreter Path から Remote... を選ぶ。

pycharm_remote_interpreter.png

Fill from deployment server settings > bebe とすると自動で設定入ってくれて便利。

Python interpreter path だけ、先ほど作成した venv の python /home/drillbits/dev/sushiapp/env/bin/python を指定しておく。

ちなみに Remote Interpreter、接続情報とか入って名前めっちゃ長くなるので、あとから鉛筆アイコンで編集して適当な短い名前に変えるといい。

setup.py develop の Run Configuration 作成

Run > Edit Configurations...

+ を押して Python を選択、setup develop という名前で Configuration を追加する。

pycharm_pyramid_pserve_notreload.png

Python Interpreter に先ほど作成した Remote interpreter を指定して、Script に setup.py のパス、Working directory に作業ディレクトリのパスを入力する。ここのパスはローカルだけど問題ないっぽい。

これを Run すると仮想環境で setup.py develop が実行されて pyramid が install されたりする。

また、この Configration の Python Interpreter をローカルの venev のものに変えたものも作っておく ((local) setup develop)。理由は後述。

setup develop の Before launch っていうところで + を押して、Run Another Configuration として (local) setup develop を追加しておくと setup develop を Run する前にローカルにも実行できて便利。

Project Interpreter

Run/Debug Configurations の他にも Preferences > Project Interpreter で、デフォルトの Interpreter っぽいものを設定できる。

仮想環境を使いたいのだから、ここも Remote Interpreter にするのだろうと思ってたけど、これはよくなかった。

Remote Interpreter を設定してしまうと zope.sqlalchemy みたいに namespace パッケージがあるやつを import したときに IDE っぽい赤い波線が出て Unresolved reference とか言われる。IDE 使っているのだからそういう警告っぽいのは出ないようにしたい。

Project Interpreter をローカルのものにして、かつローカルにもちゃんとインストールしておけば問題ない。なので Run Configuration にローカルのやつも作った。Before launch 使えば実行漏れもなくなる。

問題点

PyCharm、setup.py の install_requires にパッケージ追記するとインストールするか聞いてくれるのだけど、これは Project Interpreter のところにしか実行してくれない。なんとかしたい。

pserve の Run Configuration 作成

sushiapp モジュール作れば pserve できるようになるけど、これも Run Configuration でできる。

Run > Edit Configurations... で + を押して Pyramid server を選択して作る。

pycharm_run_configurations_pserve.png

Config file とかいいつつ実際は pserve のパスを設定しないといけないところが罠っぽい。Run browser にチェックしておくと実行時にブラウザ開いてくれて便利だけど、既に開いてる場合でも新しいの開くの気が付くと無限にタブが増えている。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.