tropicbirdのブログ

備忘録です。

Djangoで作ったWebアプリをHerokuでデプロイするとmediaが使えなかった。

課題

Djangoで作ったWebアプリをHerokuで公開したら、DEBUG = True の時はmediaからファイルがダウンロードができたけど、本番環境のDEBUG = False にするとmediaからファイルがダウンロードができなくなった。

原因

PaaS(Herokuなど)ではDjangoのmediaは使えない(※使うためには工夫が必要)。
(参照サイト:Djangoで静的ファイルとうまくやる

解決策

mediaを使う代わりにドロップボックスにファイルをアップロードして共有URLをHTMLにハイパーリンクとして埋め込む。ちなみに、ドロップボックスの共有URLの末尾をdl=0からdl=1に変更すると、強制ダウンロードにすることができる。

<a href="https://www.dropbox.com/<共有ファイル毎のURL>?dl=1">samplefile.pdf</a>

ポイント

対象のWebアプリでのmediaの用途が、adminが上げたファイルを利用者がダウンロードするためにmediaを使っていただけなので、上記の解決策が楽だった。

【個人メモ】PyCharmでConda環境のDjangoを使用する方法(結論:解決できず。。)

PyCharmのConda環境でDjangoのプロジェクトを作成(下図)しようとしましたが、
f:id:tropicbird:20200916103027p:plain



エラーが発生(以下は一例)してうまくできませんでした。

Failed to get real commands on module "djangoProject": python process died with code 1: Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2020.2.1\plugins\python\helpers\pycharm\_jb_manage_tasks_provider.py", line 25, in <module>
    django.setup()
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\conf\__init__.py", line 76, in __getattr__
    self._setup(name)
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\conf\__init__.py", line 63, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\conf\__init__.py", line 142, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\XXX\Dropbox\PycharmProjects\djangoProject\djangoProject\settings.py", line 57, in <module>
    'DIRS': [BASE_DIR / 'templates']
TypeError: unsupported operand type(s) for /: 'str' and 'str'

色々とエラーの解決を試みましたが、私の力では解決できませんでした。なので、以下の動画を参考におとなしくVirtualenv環境でDjangoのプロジェクトを作成することにしました。
www.youtube.com

Git Bashでcondaを有効にする方法

1. Git Bash上で以下のコマンドを入力すると、Git Bash上でcondaコマンドが使えるようになります。

$ . /c/users/XXX/anaconda3/etc/profile.d/conda.sh

2. 上記を毎回入力するのが面倒な場合は、以下のコマンドを入力すると、Git Bash起動後すぐにcondaコマンドが使えるようになります。

$ echo ". /c/users/XXX/anaconda3/etc/profile.d/conda.sh" >> ~/.profile

3. 最後に、以下のコマンドを入力してcondaの対象とする環境を指定します

$ conda activate <環境名>

以下の図は問題なく1.~3.の入力ができた場合の例です。(※以下の例のAnacondaの環境名はpythonProjectです。)

f:id:tropicbird:20200915145214p:plain

PyCharmでJupyterを起動する際のエラー(Notebook kernel doesn't match project interpreter)の解決方法

エラーの内容

Anacondaの環境下でPyCharmを使用する場合に、jupyter notebookのファイル(.ipynb)を作成してコードを実行すると、「Notebook kernel doesn't match project interpreter」というエラーメッセージが出てきた。エラーメッセージに関わらず、PyCharm上で起動しているJupyterは正常に動いている気もしましたが、解決方法を見つけたので記します。

解決方法

1) Anacondaのプロンプトを開く。
f:id:tropicbird:20200914225359j:plain

2) 以下のコードを入力する。myenvの箇所はプロジェクト環境名に置き換えてください。

conda activate myenv
python -m ipykernel install --user --name myenv --display-name "Python (myenv)

例えば、プロジェクト環境名がpythonProjectなら、以下の通りです。(※オレンジの塗りつぶし箇所は個人情報)

f:id:tropicbird:20200914231505j:plain

3) 最後にPyCharmを再起動すれば、PyCharm上でjupyter notebookのファイル(.ipynb)を実行してもエラーが出ないことが確認できます。もし「Notebook kernel doesn't match project kernel」という新しいエラーメッセージが出た場合は、エラーメッセージと同時に表示される「Update notebook kernel」をクリックすれば解決します。

PDFの文章を自動翻訳する際の小技(改行の対処方法)

課題

PDFの文章をDeepL翻訳やGoogle翻訳にコピペすると、貼り付け後の文章に改行が入っているため翻訳が上手くされない。改行を消したい。

解決方法

ブラウザ(Google Chromeとか)のURL欄にPDFの文章を貼り付けて、再びそれをコピペすると、改行が消える。

wgrib2を使ってGRIB2形式のファイルを読み込む際の落とし穴(Windows)

はじめに

気象データは世界共通フォーマットのGRIB2形式で提供されている場合が多いですが、そのファイルをCSV形式とかに変換する際に、NOAA(アメリカ海洋大気庁)が提供しているwgrib2を使ってデコードする必要があります。ネット上でwgrib2の使用方法を探すことができますが、次の2つの落とし穴に見事にハマってしまいました。

落とし穴1:cygwinでは上手くいかなかった。

NOAAの公式サイトClimate Prediction Center - wgrib2: how to compileではOSがWindowsの場合、cygwinを使うことを勧めています。しかし、cygwinだとwgrib2を使う際にどのコマンドラインやライブラリを別途インストールする必要があるか、いまいち不明瞭(私には分からなかった)で、何回もコンパイルに失敗しました。

落とし穴2:WSLでwgrib2を使う際はbase環境を解除する必要あり

結果的に、私はcygwinではなくWSL上でwgrib2を動かすことに成功しました。しかし、WSLがAnacondaのbase環境になっているとwgrib2が動きませんでした。この場合、以下のコマンドでbase環境を解除する必要がありました。

conda deactivate

ちなみにbase環境に戻したい時は次の通りです。

conda activate base