0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ProgakuAdvent Calendar 2024

Day 23

Poetry配下におけるDjangoプロジェクトのconfig(settings.py)に関する学習備忘録

Last updated at Posted at 2024-12-29

前提

以下Qiitaの続きです。現常駐先では今はPythonもJavascriptも書いていないですが、AI導入関連の作業への参画が今後ありうることを念頭に今も 主な参考資料①~④ をベースにゆるゆる学習を続けています。 主な参考資料① にあるのでReactとかも今は使えないですが、老後に備えてそのうちします。たぶん。

なお、学習はWindowsの私用ノートPC、VScodeで基本的にしています。 また、DjangoプロジェクトのPythonは以下QiitaにあるようにLinuxに入れたものを使っています。※そのため書き損じがあっても大概wslを基本あらかじめ起動しているものとして読んでください。


とりあえず現在、ポートフォリオのホーム画面だけ概ね移行しました。

フォルダ構成・ブラウザ表示

フォルダ構成.png

home.png

〇今回途中生じた問題

python-dotenvとか django-extensions とか、poetry add ~で入れて「poetry配下のプロジェクトで使う場合、」settings.pyを少しいじるだけだと上手く働かない外部モジュールがいるらしい

※venvでは大丈夫でした

〇結果として有効だった対応

poetry add ~とは別にGit for WindowsやプロンプトでWSL使った後、pipでLinuxに入れる

※なぜこれでいけるのかは理由は分かっていないし、これが最適解かも分かってないです。

詳細

とりあえず、ホーム画面移行したし、Githubにpushでもするか(´д`)と思ったのですが、SECRET_KEYとか.envに書いて切り分けるべき存在忘れてました😇

※注:Djangoはデフォルトだとプロジェクト作成時点でSECRTE_KEYが以下のsettings.pyに自動生成されるようです。

というわけで、とりあえず

$ poetry add python-dotenv

でインストールして、pyproject.tomlに記述。その後.env、.gitignore作った後、以下のように、load_dotenvとかを決まり文句的に書いてwsl⇒python3 manage.py runserverで開発用サーバーを動かして、とりあえず動くか確認すると

settings.py.png

以下のようにエラーがVScodeのターミナルに出ました・・・

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/lib/python3/dist-packages/django/core/management/commands/runserver.py", line 61, in execute
    super().execute(*args, **options)
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 398, in execute    
    output = self.handle(*args, **options)
  File "/usr/lib/python3/dist-packages/django/core/management/commands/runserver.py", line 68, in handle
    if not settings.DEBUG and not settings.ALLOWED_HOSTS:
  File "/usr/lib/python3/dist-packages/django/conf/__init__.py", line 82, in __getattr__        
    self._setup(name)
  File "/usr/lib/python3/dist-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/lib/python3/dist-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/mnt/c/xampp/htdocs/Portfolio/Djangoes/django_portfolio/django_portfolio/settings.py", line 16, in <module>
    from dotenv import load_dotenv
ModuleNotFoundError: No module named 'dotenv'

During handling of the above exception, another exception occurred:

~中略~

    from dotenv import load_dotenv
ModuleNotFoundError: No module named 'dotenv'

「dotenv」お前さっき入ったんちゃうん??(-_-)・・

〇ちょっと迷走した記録

details

試したこと①:pyproject.tomlを確認

[tool.poetry.dependencies]
python = "^3.11"
pytest = "^8.3.3"
Django = "^5.1.3"
requests = "^2.32.3"
pyocr = "^0.8.5"
pillow = "^11.0.0"
django-tables2 = "^2.7.0"
django-filter = "^24.3"
SpeechRecognition = "^3.11.0"
django-extensions = "^3.2.3"
python-dotenv = "^1.0.1"  👈 いるやん(-_-)・・・

試したこと②:Poetry shell(Poetryのインタラクティブシェル)を使って入っているか確認

※シェル起動時とかに出てくるメッセージは省略しています。

$ poetry shell
$ poetry show python-dotenv

結果、以下のように出力されました

name         : python-dotenv
version      : 1.0.1
description  : Read key-value pairs from a .env file and set them as environment variables

いるやん(-_-)・・・

試したこと③:全て削除してPythonのバージョンを変えてみて、もう一度1からやる

エラー(-_-)・・・

〇結局何が原因だったか

どうもLinux(Ubuntu)の中に、python-dotenvをGit for Windowsとかコマンドプロンプトで別に入れる必要があった

wsl
$ pip install python-dotenv

を使ったら下記Linuxフォルダにdotenvが入り全体もなぜか無事動きました。

なお一度アンインストール&再インストールして再現性をもって実証できたのですが、「このpipで入れたdotenv」はどうも poetry add ~ で入れたものとは別物でフォルダの場所を示すと以下の場所にインストールされるものにあたるようです。

dotenv.png

※poetry add ~で入れたものはどこにあるのか

poetry配下のプロジェクトを開いた状態で

wsl
$ poetry env info --path

とpoetryコマンドをたたくと「Linux/Ubuntu(等のディストリビューション)」を省略した状態で以下のようなパスが出てきて、

/home/Linuxで設定したユーザー名/.cache/pypoetry/virtualenvs/プロジェクト名を含む仮想環境(virtualenv)名

実際これをたどるとその奥に以下のようにpoetry add ~ で追加した外部モジュールがどうも入っている「site-packages」というフォルダがあります。

dotenv_another.png


自分は転職活動中後期からPythonの学習を始めて、だいたい1年強になります。
開発環境どうしてるかの変遷をざっと書くとこんな感じです。

①Python学習当初、仮想環境とかマジで何も考えずにローカルのCドライブにひたすら外部ライブラリー・パッケージをpip install
   👇
②Progakuで①はさすがにそれは外部ライブラリー・パッケージ間の干渉を考えたときにヤバいことを教えてもらう😇
   👇
③venvとかrequirements.txtを覚えて、しばらく venv でしのぐ
   👇
④Poetryさんをさわらせ始めていただく👈今ココ

②と③の間で以前ローカルのCドライブに直に入れた外部ライブラリーをひたすらポチポチpip uninstallした記憶があるのですが、実際pip listで確認すると今は以下みたいになっていました。

Linuxに今回のように外部ライブラリーを他に別途pipとかで入れた覚えはないので、おそらくpoetryでLinux内に作った仮想環境内の外部ライブラリーが全て拾われて載っているのではないか??と思っています。

なお今のところ、 poetryが上手くやってくれているのか外部ライブラリー同士の干渉による不具合が起こった記憶はありません。

gitforwindows_andsoon.png


django-extensionsは、ルーティング調べたり、models.pyをもとにER図を作成したりする等Django開発を効率化するための拡張機能を追加する外部ライブラリーです。本題①を対処しようとして、ちょっと迷走している間にpython-dotenv同様とりあえず

poetry add django-extensions

して入れたつもりになってました。なおこれも本題①同様に Git for Windowsとかで

wsl
$ pip install django-extensions 

していなかったのが、ボトルネックになっていました。

なお、django-extensionsは使用する際、プロジェクト作成時にできるデフォルトでできるsettings.py の INSTALLED_APPS の要素に 'django_extensions'を追記する必要があります。

プロジェクトと同名フォルダ内にある settings.py
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_extensions',           👈こんなかんじここはアンダーバーを使うことに注意
    'resume', #resumeアプリケーションの登録
    'form_components', #form_componentsアプリケーションの登録
]

〇後日、個人的に発見した関連便利コマンド

①poetry配下のプロジェクトにインストールされている外部ライブラリを確認 & それらの依存関係を視覚的に確認

$ poetry show --tree

使うとこんな感じで何が入っているのか見えます。

詳細

poetry-show-tree.png

②poetry配下のプロジェクトに関わっている外部ライブラリー・パッケージがどこにいるかを表すパスを一気に洗い出す

wsl
$ python3 -m site

使うとこんな感じで外部ライブラリー・パッケージ関連ファイルが入っているパスが一気に出てきます。

詳細

python-m-site.png

主な参考資料

①Python Django 4 超入門 掌田津耶乃 (著) 秀和システム

Amazonリンク

https://www.amazon.co.jp/Python-Django-4-%E8%B6%85%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798062413/ref=sr_1_2_sspa?crid=MZGZWVELQ6MA&dib=eyJ2IjoiMSJ9.eEG-HVhGiMXwCJ6xOkfrdY5LDwm8oswFB-HEsTcpi7tolQxne-QjUkBh47VWZQ3x4gpZLBuD4C4SqnayOqtCyOBniyYUG3bXWPEWSZmAj1fIy7ZbHDamJ4_lHsR9wXue9mv-YjuM8yXSL0seZrmHPABx8VgWAMcPo71jJeFlQ4DxWIqgTx3W9XULh4FOyhfMkpoRwry1MlAttgFF1WWYY7EjKvJzQn2oP-fSodDEL7TDRVZ0gVNFU2d8wOckHko20_hKYcHBKAlv61MLnPOC6KB9bd6IXk1Zhp75Y2V6lnY.cYHcC9HbRGJ5EP_NWX1lkmumKLak2nM1yfP1DvKPD4A&dib_tag=se&keywords=python+django+4+%E8%B6%85%E5%85%A5%E9%96%80&qid=1735366082&sprefix=Python+Dj%2Caps%2C262&sr=8-2-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1

②Pythonで文書処理: 資料のPDF化、文字認識、検索、その他さまざまな作業をプログラミングで解決 北山洋幸(著) カットシステム

Amazonリンク

https://www.amazon.co.jp/Python%E3%81%A7%E6%96%87%E6%9B%B8%E5%87%A6%E7%90%86%E2%80%95%E8%B3%87%E6%96%99%E3%81%AEPDF%E5%8C%96%E3%80%81%E6%96%87%E5%AD%97%E8%AA%8D%E8%AD%98%E3%80%81%E6%A4%9C%E7%B4%A2%E3%80%81%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E4%BD%9C-%E5%8C%97%E5%B1%B1-%E6%B4%8B%E5%B9%B8/dp/4877834974

③Pythonではじめるゲーム制作超入門 知識ゼロからのプログラミングとアルゴリズムと数学 廣瀬 豪(著) インプレス

Amazonリンク

https://www.amazon.co.jp/Python%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%B2%E3%83%BC%E3%83%A0%E5%88%B6%E4%BD%9C-%E8%B6%85%E5%85%A5%E9%96%80-%E7%9F%A5%E8%AD%98%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%EF%BC%86%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%A8%E6%95%B0%E5%AD%A6-%E3%82%B2%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA%E3%82%B9%E3%82%AD%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97-%E5%BB%A3%E7%80%AC-%E8%B1%AA/dp/4295017655

④これからのJavaScriptの教科書 モダンJavaScriptを基礎から実用レベルまで 狩野 祐東 (著)  SB Creative

Amazonリンク

https://www.amazon.co.jp/%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%81%AEJavaScript%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E7%8B%A9%E9%87%8E-%E7%A5%90%E6%9D%B1/dp/481561802X/ref=sr_1_1?adgrpid=163129550575&dib=eyJ2IjoiMSJ9.brJJGM6YJp_whwUcq6Viaoy3oxeFJ-J-HIJBq14dwS2l5ZM3KKKFmRb4gs3uy8qOLuLTr0Op1QJzsN1a1OOLcp1rPkWpXjilCorT3XbtH6Q7pNmtV1o146sxufgnwRUk7FJ3TvR4a1dFPDzmyAuJK8xRU07cyM4yRGyHyK5dl-lGvnD1sG7dIJkUIsOtrvfCOM0HDGo9ASBJ2iqUEggqyOgugvPqrDdHm83T3jQwo1YTNgxXgy3J1Dz-w8sFyXhWiwl65Nufm3pxn4cZIzZlQPpLITlw4OaJqsWKHqXW54iIGqHrfbgHa0tBtqwRoQ--JgxgMX5j6NhJhO36R8QccF4Yxw1WhDJZjp8ip-6TNmck9zjkhfj7_92Ws31kuCn_3iNkYpZJnx0NOVdaK8mrmRhlBdN85bXBdMDF-bWaKr0.O_2qZqyfPRc0jn-RKmGfL9ICylDb6FIHVFUe_qqM2pk&dib_tag=se&gad_source=1&hvadid=700496652421&hvdev=c&hvlocphy=1009507&hvnetw=g&hvqmt=e&hvrand=6306356088730467156&hvtargid=kwd-2307416954109&hydadcr=27272_14738606&jp-ad-ap=0&keywords=%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%81%AEjavascript%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8&qid=1736004404&sr=8-1

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?