Python

Simple Hosting 的 Python 主機能讓您輕鬆又快速的佈署您的 Python 應用程式。

準備工作

  • 熟悉 Python 程式與 WSGI

  • 您的程式必須設定 WSGI 進入點

  • 您必須熟悉 Git

支援的版本

當您在建立 Python 主機時,您可以選擇兩種版本:

  • 2.7 (可切換到 3.2)

  • 3.6

如果您選擇 Python 2.7 主機,您可以切換 Python 的版本,切換方法請參考下方說明。

基本功能

您的 Python 程式必須包含一個名為 wsgi.py 的檔,內容包含了應用程式進入點,您可以參考此文件: http://www.python.org/dev/peps/pep-0333/#the-application-framework-side

網域名稱

在主機建立時已經預先連結了一個測試用的域名。您可以連結其他域名或子域名。全部都會連接到同一份程式碼。

範例

目錄結構

.
└── wsgi.py

wsgi.py:

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')])
    return ['<!DOCTYPE html><html><meta charset="utf-8"><title>It works',
            '</title><h1>It works!</h1>']

應用程式相依套件

您的應用程式相依套件將會使用 pip 進行安裝,您必須將相依套件寫入 requirements.txt 內。

若要自動安裝相依套件,您必須使用 Git。

當您在本機開發應用程式時,您會使用 pip install 來安裝函式庫。完成後,您要將它佈署到線上環境,請在本機執行下列指令列出所有相關套件:

$ pip freeze > requirements.txt

這個指令會將您所有安裝的模組或是函式庫都列在 requirements.txt 這個檔案內。您必須使用 Git 推送您的程式碼與此檔案到主機上。當您使用 SSH 執行佈署指令時,就會自動安裝相依套件。

更多資訊,請參考:

http://www.pip-installer.org/en/latest/cookbook.html#requirements-files

關於更多使用 git+ssh 佈署您程式碼的說明,請參閱我們的 Git 文件。

選擇 Python 版本

備註

此章節僅適用於 Python 2.7 / 3.2 的主機。

您可以在我們提供的版本中指定您要使用的版本。您必須建立一個檔案叫 gandi.yml,存放於專案的根目錄中,定義 python 的版本:

gandi.yml

python:
  version: 3.2

上述設定就會強制使用 Python 3.2 的版本。若是您只建立了檔案但並未設定 python ,或是您的 yaml 格式錯誤,將會跳回預設的版本。如果您指定了不存在的版本,則您的應用程式會無法執行,並且會在佈署日誌跟開機日誌中出現錯誤訊息。

備註

此檔案,跟其他您專案的檔一樣,必須要在您執行佈署指令之前,加入 Git 內並推送到 Simple Hosting 的遠端儲存庫中。

靜態檔案

請將您的靜態檔案儲存在名為 /static/ 或是 /media/ 的目錄中,這樣 Apache 伺服器就可以存取。

日誌檔

您的應用程式錯誤訊息將會寫入主機的日誌檔中:

  • 若您使用 SSH 登入時,位置在: /srv/data/var/log/www/uwsgi.log

  • 若您使用 sFTP 登入時,位置在: /lamp0/var/log/www/uwsgi.log

您可以查看這些檔案來了解應用程式是否正常啟動。

您也可以依照您的需求調整日誌檔,請在專案根目錄新增一個檔案叫 logging.ini

如果想瞭解更多資訊,請參考以下說明:

範例

Flask 範例

https://github.com/crito/minitwit

目錄結構

.
├── minitwit.py
├── requirements.txt
├── static/
├── templates/
└── wsgi.py

wsgi.py:

from minitwit import app as application

requirements.txt:

flask

Django 範例

目錄結構

.
├── media/
├── cms/
│   ├── manage.py
│   └── cms/
│       ├── init.py
│       ├── settings.py
│       ├── templates/
│       └── urls.py
├── requirements.txt
├── static/
└── wsgi.py

wsgi.py:

import sys
import os
import os.path

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),
                                                'cms')))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cms.settings')
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

requirements.txt:

django-cms

字元編碼

若您要在 uwsig 中指定特殊語系,例如您的檔案使用非英文字元,請在 uwsig.py 增加下列設定:

os.environ['LC_ALL']="en_US.UTF-8"
os.environ['LC_LANG']="en_US.UTF-8"