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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1773閲覧

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

Daimian

総合スコア53

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/02/19 04:12

編集2019/02/19 06:15

前提・実現したいこと

下記のソースコードに記載のあるシェルスクリプトを実行すると、下記のエラーメッセージが表示されます。どうやら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

python

1import numpy as np 2import glob 3from netCDF4 import Dataset 4import csv 5try: 6 # Python 2 7 from itertools import izip 8except ImportError: 9 # Python 3 10 izip = zip 11from pytz import timezone 12from datetime import datetime 13 14utc_now = datetime.now(timezone('UTC')) 15# print(utc_now) 16utc_year = utc_now.strftime("%Y") 17utc_month = utc_now.strftime("%m") 18utc_day = utc_now.strftime("%d") 19utc_monthday = utc_month + utc_day 20 21dataDir = "../nc/%s/%s/"%(utc_year, utc_monthday) 22csvfile = "../csv/isslis_flashloc_test.csv" 23 24files = glob.glob(dataDir+'*.nc') 25 26flash_lat = np.array([]) 27flash_lon = np.array([]) 28flash_TAI93_time = np.array([]) 29 30for i in files: 31 datafile = Dataset(i) 32 33 flash_lat_check = datafile.variables.get('lightning_flash_lat', 'None') 34 flash_lon_check = datafile.variables.get('lightning_flash_lon', 'None') 35 flash_TAI93_time_check = datafile.variables.get('lightning_flash_TAI93_time', 'None') 36 37 if not flash_lat_check == 'None': 38 flash_lat = np.concatenate([flash_lat,datafile.variables['lightning_flash_lat'][:]]) 39 if not flash_lon_check == 'None': 40 flash_lon = np.concatenate([flash_lon,datafile.variables['lightning_flash_lon'][:]]) 41 if not flash_TAI93_time_check == 'None': 42 flash_TAI93_time = np.concatenate([flash_TAI93_time,datafile.variables['lightning_flash_TAI93_time'][:]]) 43 44with open(csvfile, 'w') as myfile: 45 writer = csv.writer(myfile) 46 writer.writerows(izip(["flash_lat"], ["flash_lon"], ["flash_TAI93_time"])) 47 writer.writerows(izip(flash_lat, flash_lon, flash_TAI93_time)) 48 print ("making csv file is compleated") 49 50print ("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)) 51

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を起動させているような状態です。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/02/19 05:52

test.shを実行する手順も追記してください
Daimian

2019/02/19 06:16

ご指摘ありがとうございます。実行手順について、追記しました!
t_obara

2019/02/19 06:31

otnさんの回答通りです。pythonで参照されるのは/usr/local/bin/pythonで、python3.7 、/usr/bin/pythonはpython 2.7です。
Daimian

2019/02/19 06:45

ご回答ありがとうございます!お二方のおかげでうまくいきました!!!今後のために2つ質問させてください。。 1:/usr/local/bin/pythonが、python3.7の実行ファイルであることを調べる方法をご教示いただけますか。。 2:pipでインストールしたライブラリのパスを指定していないにも関わらず、なぜ、pythonの実行ファイルのパスを指定しただけで、ライブラリも読んでくれるのでしょうか?
t_obara

2019/02/19 06:55

whichコマンドとpython -V pipでインストールしたモジュールはバージョンごとに管理されます。 /usr/local/lib/python3.7/site-packages/numpy
Daimian

2019/02/19 07:01

最後まで迅速なご回答本当に助かりました。ありがとうございます!
otn

2019/02/19 07:12

> 2:pipでインストールしたライブラリのパスを指定していないにも関わらず、なぜ、pythonの実行ファイルのパスを指定しただけで、ライブラリも読んでくれるのでしょうか? pipコマンドの1行目に、どのpythonでpipを実行するのかが書いてあります。 python自身は、自分がコンパイルされたときのconfig内容(/usr以下にインストールされるのか、/usr/local 以下にインストールされるのか、$HOME以下にインストールされるのか等)を知っているので、自分用のライブラリの場所に、パッケージをインストールします。
Daimian

2019/02/19 07:40

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

2019/02/19 07:59

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

2019/02/19 08:57

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

回答1

0

ベストアンサー

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

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

投稿2019/02/19 04:57

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daimian

2019/02/19 05:06

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問