質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.90%

シェルスクリプトでpythonのライブラリが読み込めない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,830

score 52

前提・実現したいこと

下記のソースコードに記載のあるシェルスクリプトを実行すると、下記のエラーメッセージが表示されます。どうやらpythonで使用しているライブラリがシェルスクリプトから呼び出せてないみたいです。どうしたらライブラリを呼び出せるのか、ご教示いただきたく存じます。

発生している問題・エラーメッセージ

  File "/hoge.py", line 1, in <module>
ImportError: No module named numpy
    import numpy as np

該当のソースコード

test.sh

#!/bin/sh

/usr/bin/python /hoge.py

hoge.py

import numpy as np
import glob
from netCDF4 import Dataset
import csv
try:
    # Python 2
    from itertools import izip
except ImportError:
    # Python 3
    izip = zip
from pytz import timezone
from datetime import datetime

utc_now = datetime.now(timezone('UTC'))
# print(utc_now)
utc_year = utc_now.strftime("%Y")
utc_month = utc_now.strftime("%m")
utc_day = utc_now.strftime("%d")
utc_monthday = utc_month + utc_day

dataDir = "../nc/%s/%s/"%(utc_year, utc_monthday)
csvfile = "../csv/isslis_flashloc_test.csv"

files = glob.glob(dataDir+'*.nc')

flash_lat = np.array([])
flash_lon = np.array([])
flash_TAI93_time = np.array([])

for i in files:
    datafile = Dataset(i)

    flash_lat_check = datafile.variables.get('lightning_flash_lat', 'None')
    flash_lon_check = datafile.variables.get('lightning_flash_lon', 'None')
    flash_TAI93_time_check = datafile.variables.get('lightning_flash_TAI93_time', 'None')

    if not flash_lat_check == 'None':
        flash_lat = np.concatenate([flash_lat,datafile.variables['lightning_flash_lat'][:]])
    if not flash_lon_check == 'None':
        flash_lon = np.concatenate([flash_lon,datafile.variables['lightning_flash_lon'][:]])
    if not flash_TAI93_time_check == 'None':
        flash_TAI93_time = np.concatenate([flash_TAI93_time,datafile.variables['lightning_flash_TAI93_time'][:]])

with open(csvfile, 'w') as myfile:
    writer = csv.writer(myfile)
    writer.writerows(izip(["flash_lat"], ["flash_lon"], ["flash_TAI93_time"]))
    writer.writerows(izip(flash_lat, flash_lon, flash_TAI93_time))
    print ("making csv file is compleated")

print ("information: flash_lat.size is %s, flash_lon.size is %s, flash_TAI93_time.size is %s"%(flash_lat.size, flash_lon.size, flash_TAI93_time.size))

Dockerfile

FROM python:3

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

RUN python -m pip install numpy
RUN python -m pip install glob3
RUN python -m pip install netCDF4
RUN python -m pip install csv23
RUN python -m pip install picklable-itertools
RUN python -m pip install pytz
RUN python -m pip install datetime2

RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y cron

docker-compose

version: '3'

services:
  python:
    build:
      context: ./
      dockerfile: Dockerfile_python
    tty: true
    container_name: kaminari_python
    volumes:
      - ./:/app/:rw
    working_dir: /app/kaminari_python

実行手順

実験段階ですので、整理されておりませんが、

/etc/cron.d/simple-cron

* * * * * root /app/test.sh


このようにして、cronでシェルスクリプトを動かし、pythonを起動させているような状態です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Daimian

    2019/02/19 16:40

    ありがとうございます!とても勉強になります。
    ちなみにごめんなさい、「pipコマンドの一行目」とはどのように確認した時のpipコマンドでしょうか??

    キャンセル

  • otn

    2019/02/19 16:59

    cat /usr/bin/pip とか cat /usr/local/bin/pip とか。

    キャンセル

  • Daimian

    2019/02/19 17:57

    ありがとうございます!よく理解できました!

    キャンセル

回答 1

checkベストアンサー

+1

インストールされていない、もしくは、複数のPythonをインストールしていて思っているのと違うPythonを起動してしまった。

/usr/bin/pythonは、OS標準のPythonですが、起動したいのはそれですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/19 14:06

    ご回答ありがとうございます。この件、説明が不足していました。追記しましたが、dockerfileでimageを作成しました。dockerfile内にある記述でpythonおよびpipでライブラリのインストールをおこなっております。ですので、 OS標準のPythonではないはずです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.90%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る