VR侍

主に興味があって調べたことについてまとめていきます。

DjangoのDBをPostgreSQLに変更する

Djangoで作成したWebアプリを、Herokuにアップして使用できるようにしたい。
DjangoDBMSの設定はデフォルトでは、SQLiteになっているが、
Herokuは Postgressを推奨しているため、先ずはその設定をしたい。

状況整理、自分の環境は以下の通り。
Windows 10
Python 3.5.1
PostgreSQL 9.5
Django 1.9.7

PythonでPosgreSQLを使用するためには、psycopg2というライブラリを入れる必要があるが、
上記の環境だと通常通り入れようとするとエラーになってしまう。

以下のページを参考にさせていただきました。
http://prunus1350.hatenablog.com/entry/2016/01/09/135110

ただし、ページに書かれていた名称のものが見当たらなかったため、
代わりに psycopg2-2.6.1-cp35-cp35m-win_amd64.whl を用いた。

Pythonコンソールにて以下を実行することでインストール成功の確認ができる。
>>> import psycopg2
>>>

postgresにパスワードなしでログインする方法
C:\Program Files\PostgreSQL\9.5\data\pg_hba.conf
の、

# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5

# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust

に書き換える

次に、管理者権限でコンソールを開いて

net stop postgresql-x64-9.5
net start postgresql-x64-9.5

してサービスを再起動後、
psql -U postgress でログインできる。

次に、settings.py のデータベース設定を公式を参考に以下のように変更。
DB名やユーザ名などは初期設定のまま。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
 'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD' : '',
'HOST' : '127.0.0.1',
'PORT' : 5432,
}
}

そして、マイグレーションの実行
python manage.py migrate

Operations to perform:
Apply all migrations: sessions, admin, auth, contenttypes
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying sessions.0001_initial... OK

よさそうである。

Python の Web アプリフレームワーク

基本設定はあらかた完了したので、Webアプリケーションを作りたいと思った。
今回は、Webアプリケーションフレームワーク Django(ジャンゴ)を利用してみたいと思う。
仮想環境を作成し、以下のコマンドでDyangoをインストール

> pip install django

以下のコマンドで正しくインストールできたか確認
>pip freeze
Django==1.9.7

次にプロジェクトを作成する。
> django-admin startproject <プロジェクト名>

その場所にプロジェクト名のフォルダが出来上がる。
プロジェクトフォルダへ移動して以下のコマンドを実行
> python manage.py runserver 8080

ブラウザに以下のURLを入力すると、テンプレ画面が表示される。
http://127.0.0.1:8080/
地味に感動。

今日はここまで。

VS code での Git ・ GitHub の利用

Gitは事前にインストールしておく必要がある。
今回は、git version 2.8.3.windows.1を使用した。

1. VSCode で、ワーキングフォルダを選択する。

 

2. リポジトリの作成
まず、左側のビューバーにあるGitのマークをクリックして、
「Initialize git repository」ボタンをクリック。

リポジトリ内の未コミット(Untracked)のファイルが表示される。

 

3. ローカルリポジトリへのコミット
入力窓から、コミットメッセージを入力してチェックマークのボタンをクリックする。
=> この操作で、履歴管理が開始される

 

4. ワーキングフォルダで、ファイルを修正する。
変更部分が青色で表示され、Gitアイコン上に変更されたファイル数が表示される
Gitアイコンをクリックして、変更されたファイルを選択すると、差分がハイライトされ表示される。

 

5. ステージング
Gitアイコンを選択した状態で変更ファイルにカーソルを合わせ表示される「+」ボタンをクリックするとステージング状態にできる

 

6. コミット
3.と同様、ステージング状態のファイルのみ更新される

 

7. GitHubへのPush(初回)

GitHub上で空のリポジトリを作成する。

初回は VS Code で Push できないため、コマンドプロンプトで操作する。

git remote add origin <GitHub上のリポジトリのURL>

git push origin maste

 

8. GitHubへのPush(2回目以降)
Gitアイコンをクリックし、「...」ボタンをクリックしてPushを押すと、GitHubリポジトリにPushできる。

 

自分のようにコマンドプロンプトからのGit操作に慣れていない人には便利に感じた。

Pythonの日本語出力

Pythonは、マルチバイトの処理にかなり癖があるらしい。
日本語を出力しようとすると文字化けしてしまう。
いろいろ調べて次のように書くと文字化けせずに出力された。

# coding: utf-8
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
print("日本語の\r\n出力!!!")

 

以上、ひとことメモでした。

VS Code で Python

久々の更新となったが、windowspythonを触るために、visual studio code で実行できるように設定を行ってみた。
設定に当たっては、以下のサイトを参考にさせていただきました。大変参考になりました。
http://qiita.com/goforbroke/items/1197035fae25b83e7e8c

今回使用した visual studio code のバージョンは、1.1.1です。

1. pyLintの設定
VS Code の File > Preferences > User Settings から
settings.json に以下の行を追記
{
 //-------- Python configuration --------
 // The linter to use
 "python.linter": "pyLint"
}

2. 仮想環境の設定
コマンドプロンプトにて以下のコマンドを実行
mkvirtualenv vscode
(仮想環境名を vscode とした)
C:\Users\<User name>\Envs\vscode
が生成される。<User name>はwindowsのユーザ名のこと。
vscodeフォルダに移動して、以下のコマンドを実行。
pylint --generate-rcfile > .pylintrc
生成された、C:\Users\<User name>\Envs\vscode\.pylintrc
を開いて、”init-hook=” で検索する。
以下のように修正して、pylintに仮想環境のライブラリが存在するパスを指定する。
init-hook="import sys; sys.path.append('module') ; sys.path.append('C:\\Users\<User name>\\Envs\\vscode\\Lib\\site-packages')"

3. タスクの設定
VSCodeでタスクを設定するために、
C:\Users\<User name>\Envs\vscode
を開いてワーキングスペースフォルダとする。
Ctrl + Shift + p -> タスクランナーの構成で other を選択し、tasks.json を開き、以下のように編集する。

"version": "0.1.0",
"command": "cmd",
"isShellCommand": true,
"showOutput": "always",
"args": ["/c"],
"tasks": [
  {
    "taskName" : "run",
    "suppressTaskName": true,
    "isBuildCommand": true,
    "args" : ["workon vscode & python ${file}"]
  }
]

 上記設定の意図は次の通りとのこと。
 ビルドコマンドのショートカットであるCtrl+Shift+bで起動
 cmd /Cでコマンドプロンプトを実行のたびに起動(/Cの意味は、直後のコマンドを実行してプロンプト終了の意)
 tasksで実行するコマンドを&で連結し,同一タスク上で実行
 仮想化環境 vscode を起動
 ${file}でカレントファイルのPythonコードを実行

4. タスクの実行
Ctrl+Shift+b で ワーキングスペースフォルダ にあるpython プログラムを実行できる。

今日はここまで。

Pythonの環境をプロジェクトごとに分ける

Pythonは用途に応じてさまざまな機能を自分で実装せずとも既に多くのライブラリが用意されているのが魅力のひとつ。しかし、手あたり次第にライブラリをいれると後でライブラリの依存関係が分からなくなり他の環境に移す際に問題になる恐れがあるそう。
暗黙の依存が原因でプログラムが動かなくなる問題を防ぐため、プロジェクトごとに環境を分離するためのツールがある。
その名も、virtualEnvWrapper。

次のコマンドでインストール
> pip install virtualenvwrapper-win

pip最強。

1. 新規プロジェクト用の環境を作成
> mkvirtualenv <envname>
<envname>は、任意の環境名。作成後、その環境が有効の状態になる。
C:\Users\<username>\Envs\<envname> に環境が出来上がる

2. 環境の一覧表示
> workon

3. 環境の有効化
> workon <envname>

4. 環境から抜ける
> deactivate

5. 環境の削除
> rmvirtualenv <envname>
直接フォルダを削除しても問題ない。

今日はここまで。