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?

More than 1 year has passed since last update.

(続)Raspberrypi 4上のPython-slimコンテナで躓いた話

Last updated at Posted at 2023-01-30

以前書いた
Raspberry PI上のPython-slimコンテナ(Debianベース)でrustc依存のパッケージ構築に苦労した話
の続きになります
面倒な方は結論だけどうぞ

前提条件

OS: Rasbian( on Raspberrypi4 )
Docker及びDocker-composeをapt経由でインストール
Dockerfile内にpip経由でbcryptを含むいくつか(主にFlask関係)をインストールする文を書いた
ベースコンテナはpython:3.9-slim

経緯

Rasbian上のPython-slimコンテナをベースに

RUN pip install bcrypt

(正確にはbcryp依存のflask-bcrypt)したところ,rustcがないと怒られたので,rustcを入れてpipでビルドしながらインストールできるようにした

問題

コンテナ容量が1GB近くに跳ね上がる

仮説

RUN apt-get install python3-bcrypt && \
    pip install flask-bcrypt -y

すればいいのでは?

結果

apt-getでインストールされたpython3-bcryptが見つからず,bcryptパッケージをビルドしようとしてrustcがないと怒られます

原因

apt-getで入るpython packageは

/usr/lib/python3/dist-packages
もしくは
/usr/lib/python3.9/dist-packages

に入るのに対し,python-slimコンテナで参照されるモジュールパスは(こちら参照)

>>> import sys
>>> print(sys.path)
['', '/usr/local/lib/python39.zip', '/usr/local/lib/python3.9', '/usr/local/lib/python3.9/lib-dynload', '/usr/local/lib/python3.9/site-packages']

ということで,参照される先に入りません(汗)

結論

Dockerfile内のPYTHONPATH環境変数に/usr/lib/python3/dist-packagesと/usr/lib/python3.9/dist-packagesを追加
ENV PYTHONPATH="/usr/lib/python3/dist-packages:/usr/lib/python3.9/dist-packages"

RUN apt-get install python3-bcrypt && \
    pip install flask-bcrypt

(説明のため簡略化しています.実際には他のパッケージもインストールしてます)

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?