OS:Raspberry pi
pip install schedule
にてモジュールをインストールしたのですが、
.serviceファイルで起動時にpythonプログラムを起動させると
importエラーになります。
お力下さい。
今までの質問の経緯
https://teratail.com/questions/125361
GarbageDayReminder.py
場所:/opt/GarbageDayReminder/GarbageDayReminder.py
python
1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4# +++ モジュール +++ 5from threading import Thread 6import RPi.GPIO as GPIO 7import datetime 8import schedule 9import pandas 10import time 11import csv 12import os 13 14# +++ 変数 +++ 15# リマインド時間 16spc_time = "7:20" 17 18# 確認時間 19start_time = "00:00:00" 20end_time = "08:30:00" 21 22# +++ クラス +++ 23class GarbageDayReminder(object): 24 # イニシャライズ 25 def __init__(self): 26 pass 27 28 # 日付処理 29 def date(self): 30 # 変数 31 FormatDay = "%Y/%m/%d " 32 FormatTime = "%H:%M:%S" 33 34 # 今日の日時を取得 35 now = datetime.datetime.now() 36 37 # 明日の日時を取得 38 tmr = now + datetime.timedelta(days=1) 39 40 # 1990-01-01対策の現在日付を追加 41 date = now.strftime(FormatDay) 42 43 # 今日、明日を振り分ける時間を作成 44 start = datetime.datetime.strptime(date + start_time, FormatDay + FormatTime) 45 end = datetime.datetime.strptime(date + end_time, FormatDay + FormatTime) 46 47 # 今日、明日日付取得の分岐 48 if start <= now <= end: 49 # 今日日付の取得 50 today = "{}/{}/{}".format(now.year, now.month, now.day) 51 return today ,"today" 52 else: 53 # 明日の日付を取得 54 tommorow = "{}/{}/{}".format(tmr.year, tmr.month, tmr.day) 55 return tommorow ,"tommorow" 56 57 # csv処理 58 def csv(self,date): 59 # データが格納されている作業ディレクトリまでパス指定 60 os.chdir("/opt/GarbageDayReminder") 61 62 # csvファイルを読み込む 63 df = pandas.read_csv("garbage_day.csv") 64 65 # 何のゴミの日か取得 66 garbage = df[df["日付"] == date]["ゴミ"].values[0] 67 68 return garbage 69 70 # リマインダー処理 71 def reminder(self, now, garbage): 72 # 辞書 73 gb_dict = {"燃":"燃やすごみ",\ 74 "不":"燃やさないごみ",\ 75 "缶":"空き缶、スプレー缶、空きびん、廃蛍光管",\ 76 "資":"プラスチック製容器梱包、ペットボトル",\ 77 "紙":"紙類ごみ",\ 78 "草":"せんてい枝、庭の草", \ 79 "粗":"粗大ごみ"} 80 81 # 今日、明日の切替 82 if now == "today": 83 now = "今日" 84 elif now == "tommorow": 85 now = "明日" 86 else: 87 return 88 89 # リマインド 90 if garbage in gb_dict: 91 msg = "/opt/jtalk/jtalk.sh " + "ぽーーん!" + now + "は" + gb_dict[garbage] + "の日です" 92 os.system(msg) 93 else: 94 msg = "/opt/jtalk/jtalk.sh " + "ぽーーん!" + now + "のごみの日はありません" 95 os.system(msg) 96 97 # 中間処理 98 def intermediate(self): 99 # 日付処理 100 date, now = gdr.date() 101 102 # csv処理 103 garbage = gdr.csv(date) 104 105 # リマインダー処理 106 gdr.reminder(now, garbage) 107 108 # 指定時間処理 109 def specified_time(self): 110 # 指定時間に中間処理を実行 111 schedule.every().day.at(spc_time).do(gdr.intermediate) 112 while True: 113 schedule.run_pending() 114 time.sleep(1) 115 116 # チェック処理 117 def button(self): 118 GPIO.setmode(GPIO.BCM) 119 120 #GPIO12pinを入力モードとし、pull up設定とします 121 GPIO.setup(12,GPIO.IN,pull_up_down=GPIO.PUD_UP) 122 123 while True: 124 GPIO.wait_for_edge(12, GPIO.FALLING) 125 sw_counter = 0 126 127 while True: 128 sw_status = GPIO.input(12) 129 if sw_status == 0: 130 sw_counter = sw_counter + 1 131 if sw_counter >= 30: 132 print("長押し") 133 gdr.intermediate() 134 break 135 else: 136 print("短押し") 137 break 138 139 time.sleep(0.01) 140 141 print(sw_counter) 142 143 # メイン処理 144 def main(self): 145 # 指定時間処理(マルチスレッド) 146 t = Thread(target=gdr.specified_time) 147 t.start() 148 149 # デバッグ用 150 #gdr.intermediate() 151 152 # ボタン処理 153 gdr.button() 154 155# +++ 初期動作 +++ 156if __name__ == "__main__": 157 # GarbageDayReminderクラスをインスタンス化して実行 158 gdr = GarbageDayReminder() 159 gdr.main()
GarbageDayReminder.service
場所:/etc/systemd/system/GarbageDayReminder.service
service
1[Unit] 2Description = GarbageDayReminder 3 4[Service] 5ExecStart = /usr/bin/env python /opt/GarbageDayReminder/GarbageDayReminder.py 6Restart = always 7Type = simple 8 9[Install] 10WantedBy = multi-user.target
追加
エラー
場所:/var/log/syslog
May 11 20:09:46 raspberrypi env[457]: Traceback (most recent call last): May 11 20:09:46 raspberrypi env[457]: File "/opt/GarbageDayReminder/GarbageDayReminder.py", line 8, in <module> May 11 20:09:46 raspberrypi env[457]: import schedule May 11 20:09:46 raspberrypi env[457]: ImportError: No module named schedule May 11 20:09:46 raspberrypi systemd[1]: GarbageDayReminder.service: Main process exited, code=exited, status=1/FAILURE May 11 20:09:46 raspberrypi systemd[1]: GarbageDayReminder.service: Unit entered failed state. May 11 20:09:46 raspberrypi systemd[1]: GarbageDayReminder.service: Failed with result 'exit-code'. May 11 20:09:46 raspberrypi dphys-swapfile[357]: Starting dphys-swapfile swapfile setup ... May 11 20:09:46 raspberrypi systemd[1]: Started Raise network interfaces. May 11 20:09:46 raspberrypi systemd[1]: GarbageDayReminder.service: Service hold-off time over, scheduling restart. May 11 20:09:46 raspberrypi systemd[1]: Stopped Garbage Day Reminder. May 11 20:09:46 raspberrypi systemd[1]: Started Garbage Day Reminder.

回答1件
あなたの回答
tips
プレビュー