コンテンツにスキップ

Python

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. セットアップ

インストール

▼ yumリポジトリから

$ yum install -y python3


Dockerfile

▼ Flask、uWSGIを使用する場合

#===================
# Global ARG
#===================
ARG PYTHON_VERSION=3.10
ARG LABEL="Hiroki <example@gmail.com>"

#===================
# Base Stage
#===================
FROM python:${PYTHON_VERSION}-slim as base

WORKDIR /var/www/foo

ENV TZ Asia/Tokyo

COPY ./requirements.txt /var/www/foo/requirements.txt

RUN apt-get update -y \
  `# uwsgiの要件をインストール。` \
  && apt-get install -y \
    gcc \
  `# uESGIの起動時にFlaskが必要なため、パッケージを先にインストール。` \
  && pip install \
    --upgrade pip \
    -r requirements.txt

COPY ./docker/flask/uwsgi.ini /etc/wsgi/wsgi.ini

#===================
# development Stage
#===================
FROM base as development
LABEL mantainer=${LABEL}

CMD ["uwsgi", "--ini", "/etc/wsgi/wsgi.ini"]

#===================
# Production Stage
#===================
FROM base as production
LABEL mantainer=${LABEL}

COPY ../software /var/www/foo/

CMD ["uwsgi", "--ini", "/etc/wsgi/wsgi.ini"]

▼ FastAPI、uvicornを使用する場合

#===================
# Global ARG
#===================
ARG PYTHON_VERSION=3.10
ARG LABEL="Hiroki <example@gmail.com>"

#===================
# Base Stage
#===================
FROM python:${PYTHON_VERSION}-slim as base

WORKDIR /var/www/customer

ENV TZ Asia/Tokyo

COPY ./requirements.txt /var/www/customer/requirements.txt

RUN pip install \
    --upgrade pip \
    -r requirements.txt

#===================
# development Stage
#===================
FROM base as development
LABEL mantainer=${LABEL}

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--reload"]

#===================
# Production Stage
#===================
FROM base as production
LABEL mantainer=${LABEL}

COPY ./ /var/www/customer/

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--reload"]


02. ディレクトリ構成規約


03. ファイル構成

命名規則

▼ PEPによる規則

Pythonの命名規則は、PEPに記載されている。

▼ パッケージ

全て小文字のスネークケースとする。

▼ モジュール

全て小文字のスネークケースとする。

▼ クラス

アッパーキャメルケースとする。

▼ 例外

アッパーキャメルケースとする。

▼ 型変数

アッパーキャメルケースとする。

▼ メソッド

全て小文字のスネークケースとする。

▼ 関数

全て小文字のスネークケースとする。

▼ 変数

全て小文字のスネークケースとする。

▼ 定数

全て大文字のスネークケースとする。


package、subpackage

▼ package、subpackageとは

ディレクトリに相当する。

▼ 基本的には__init__.pyファイルを配置すること

通常パッケージとして扱うディレクトリには。

__init__.pyファイルを配置する必要がある。

一方で、名前空間パッケージではこれが不要である。


module

▼ moduleとは

パッケージ内の各ファイルに相当する。


from import

▼ from importとは

パッケージとして定義したディレクトリからクラスや関数読み込む。

存在しないパッケージをインポートしようとすると、インポートエラーになってしまう。

from <パッケージ名>.<サブパッケージ名>.<モジュール名> import <クラス名関数名>

▼ アスタリスクを使用しないこと

アスタリスクによるインポートは非推奨である。

▼ 絶対パスを使用すること

パッケージ名は絶対パスを指定する。

▼ 宣言場所について

1個のファイルで1個のクラスや関数のみを宣言する場合は、importを実行する場所はクラスや関数の外でも中でもよい。

from foo import foo

def foo():
    foo = foo()

    return foo

ただし、複数を宣言する場合は、可読性の観点からクラスや関数の中でimportを実行する。

def foo():
    from foo import foo

    foo = foo()

    return foo

def bar():
    from bar import bar

    bar = bar()

    return bar

1個ずつインポート

複数のパッケージをインポートする場合、カンマで繋ぐこともできるが、1個ずつインポートした方が良い。

# import foo, bar
import foo
import bar

def foo():
    foo = foo()

    return foo