PythonでPipenvを使ってみた

Pipenvを使うと、個人開発の時だけではなく、複数人で開発する際にもパッケージ管理が楽になります。Pythonで作業環境を整えるのが非常に簡単になります。 公式によると Pipenvは、手動でパッケージのインストールおよびアンインストールを行うのと同じように Pipfile に対してパッケージの追加および削除を行うのに加え、自動でプロジェクト用の仮想環境を作成し管理します。 またPipenvは、いかなるときも重要な Pipfile.lock を生成し、これを利用しビルドが常に同じ結果になるようにします。 Pipenvは主にアプリケーションのユーザーと開発者に、簡単に作業環境を作れる方法を提供するためのツールです。 とのことです。 Pipenvインストール 僕はMacを使っているので、Homebrewでインストールします。 brew install pipenv プロジェクト作成&パッケージのインストール Pipenvを試すためのプロジェクトを作成します。 今回はpipenv-testディレクトリをホームディレクトリに作成して、その配下にPythonの静的解析ができるflake8をインストールをします。 mkdir pipenv-test cd pipenv-test pipenv install flake8 インストールをするとターミナルに以下のような表示がされます。 Creating a virtualenv for this project… Pipfile: /Users/ユーザーネーム/pipenv-test/Pipfile Using /usr/local/Cellar/pipenv/2018.11.26_4/libexec/bin/python3.8 (3.8.2) to create virtualenv… ⠋ Creating virtual environment...created virtual environment CPython3.8.2.final.0-64 in 719ms creator CPython3Posix(dest=/Users/ユーザーネーム/.local/share/virtualenvs/pipenv-test-x1ZFqoq_, clear=False, global=False) seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/Users/ユーザーネーム/Library/Application Support/virtualenv/seed-app-data/v1) activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator ✔ Successfully created virtual environment! Virtualenv location: /Users/ユーザーネーム/....

April 3, 2020 · 2 min · 315 words · Yu

Pythonコードを静的解析した

今回はflake8, autopep8を使って、Pythonコードを静的解析します。 静的解析とは コードを実行せずに行う解析です。コーディングルールチェックや、制御フローの解析、コードの複雑度の分析をすることでソースコードにある問題点を発見してくれます。 flake8とは pep8のチェック、pyflakesのチェック、及び循環的複雑度をチェックできるラッパーのことです。導入をすることで普段から綺麗なコーディングができます。 autopep8とは pep8のスタイルガイドに適用するように、自動的にPythonコードをフォーマットしてくれます。 flake8, autopep8インストール さっそくインストールしていきましょう。 以下コマンドでflake8をインストールできます。 pip install flake8 次にautopep8をインストールします。 pip install autopep8 とても簡単ですね。 使い方 flake8 flake8 <対象ファイルへのパス> このコマンドで対象ファイルを静的解析することができ、結果をターミナルに表示してくれます。 autopep8 autopep8 --in-place --aggressive --aggressive <filename> 公式ドキュメントにはこのように実行することを推奨しています。 --in--placeをつけることでファイルを更新してくれます。これがないとコードを自動的にフォーマットして、更新してくれません。 --aggressiveをつけることでコード整形のレベルを指定でき、2つつけることでレベル2になり修正対象のエラーが増えるそうです。 このコマンドで対象ファイルを静的解析することができ、結果をターミナルに表示してくれます。 試してみる test.pyを任意のディレクトリに作成します。 内容はこんな感じにしてみました。 def example(num_a,num_b,num_c,num_d,num_e,num_f,num_g,num_h): print(num_a+num_b+num_c+num_d+num_e+num_f+num_g+num_h) num_a,num_b,num_c,num_d,num_e,num_f,num_g,num_h = 1, 2, 3, 4, 5, 6, 7, 8 example( num_a, num_b, num_c, num_d,num_e, num_f, num_g, num_h ) 適切な改行や空白をいれることができていないし、文字列がとても長くなってしまっています。まずはflake8で静的解析をします。 test.py:1:18: E231 missing whitespace after ',' test.py:1:24: E231 missing whitespace after ',' test....

April 1, 2020 · 2 min · 246 words · Yu

AtCoder Beginner Contest 160の振り返り

今回で3回目のコンテスト参加となりました。前回が2月22日(土)だったので1ヶ月ぶりでした。この1ヶ月、AtCoderの問題に取り組んでいなかったので、散々な結果となりました。。(日頃からコツコツとやらないとダメですね。) 今回の結果はC問題が解けずに終わってしまい、悔しかったです。今後、類似問題が出てきても解けるように振り返りをします。 今回の僕の結果はこちらから。(弱弱なので、お恥ずかしい。笑) A - Coffee 問題文 ある長さ6の英小文字からなる文字列がcoffeeに似ているとは、3文字目と4文字目が等しく、5文字目と6文字目も等しいことを言います。与えられる文字列Sがcoffeeに似ているか判定してください。 制約 Sは長さ6の英小文字からなる文字列である。 解説 この問題は長さ6の文字列が3文字目 = 4文字目、5文字目 = 6文字目の時にYes、違う時にNoを表示すればOKです。 回答 N = input() if(N[2] == N[3] and N[4] == N[5]): print("Yes") else: print("No") B - Golden Coins 問題文 高橋君は金色の硬貨が好きです。自分が持っている500円硬貨1枚につき1000、5円硬貨1枚につき5の嬉しさを得ます。高橋君はX円を持っています。これを高橋君の嬉しさが最大になるように両替したとき、高橋君の嬉しさはいくらになりますか? (なお、利用できる硬貨は500円玉、100円玉、50円玉、10円玉、5円玉、1円玉の6種類とします。) 制約 0≤X≤10^9 Xは整数 解説 高橋君が持っているX円が500円何枚分(Y枚)あるのかを求めてから、X=X-500*Y円をして、同様にX円が5円何枚分(Z枚)あるか求めます。 その後、Y*1000+Z*5を表示すればOKです。 回答 math.floorを使うことで小数点以下を切り捨てしています。 import math X = int(input()) total_500 = 0 total_5 = 0 total_count = 0 if(X >= 500): total_500 = math.floor(X/500) total_count += total_500 * 1000 X -= total_500 * 500 if(X >= 5): total_5 = math....

March 29, 2020 · 1 min · 145 words · Yu

Hugoで作成したサイトの表示設定について

今回、Hugo + Netlify で本ブログを作成しましたが、最初サイトの見栄えがよくなかったので、各種設定をしました。 Hugoはconfig.tomlを修正すれば、簡単にサイトの表示を変えることができます。 今回は僕が行った修正を記載します。 config.toml設定 現在の本ブログのconfig.tomlはこんな感じになっています。 baseURL = "https://yuyagishita.com/" languageCode = "en-us" title = "YAGI BLOG" theme = "beautifulhugo" summarylength = 100 HasCJKLanguage = true [Params] readingTime = true wordCount = true socialShare = true [Author] github = "yuyagishita" twitter = "yuyagishita" [taxonomies] category = "categories" tag = "tags" [[menu.main]] name = "Home" url = "/" weight = 1 [[menu.main]] name = "Tags" url = "tags" weight = 2 [[menu....

March 24, 2020 · 1 min · 149 words · Yu

Nginx + uWSGI + Python(Django)の環境をdockerで作成する

はじめに Nginx + uWSGI + Python(Django)のアプリ環境をDockerで作成する方法を本記事にまとめました。 Docker for Windowsのインストール コントロールパネルを開いて、「プログラムと機能」→「Windowsの機能を有効化または無効化」→「Hyper-V」にチェックが入っているか確認します。 チェックが入っていなかった場合は、チェックを入れてPCを再起動させて有効化させます。 次に「Docker Desktop for Windows」のインストールをします。 インストールはここからできます。 Djangoを動かす環境構築 ディレクトリ構成 以下、構成でDjangoアプリを動かします。 Infrastrcuture作成 Alpineにpython + uWSGI、Nginxをインストールします。 docker-compose.yml作成 Nginxとpython + uWSGIのコンテナを作成します。 今回はログをdjango-sample配下に出力するようにしていますが、お好きなところにログを吐き出すように設定してください。 django-sample/docker-compose.yml version: '2' services: nginx: build: "./Infrastructure/nginx/" volumes: - ./logs/nginx:/var/log/nginx ports: - "80:80" networks: django-sample-network: ipv4_address: 172.23.0.4 python: build: "./Infrastructure/python/" volumes: - ./Application/django-sample:/home/work/django-sample - ./logs/django:/home/work/django - ./logs/uwsgi:/home/work/uwsgi ports: - "8000:8000" networks: django-sample-network: ipv4_address: 172.23.0.5 networks: django-sample-network: driver: bridge ipam: driver: default config: - subnet: 172....

March 23, 2020 · 4 min · 830 words · Yu