【问题标题】:How can I debug python import not found error?如何调试 python 导入未找到错误?
【发布时间】:2017-03-23 02:32:21
【问题描述】:

我正在尝试配置 Raspberry Pi 3 以在启动时运行 python 脚本。按照教程,我在 etc/init.d 中创建了这个脚本:

#! /bin/sh
# etc/init.d/upload_photos_pir

### BEGIN INIT INFO
# Provides:     upload_photos_pir
# Required-Start:   $remote_fs $syslog
# Required-Stop:    $remote_fs &syslog
# Default-Start:    2 3 4 5
# Default-Stop:     0 1 6
# Short-Description:    Start PIR photo uploads
# Description:      Start PIR photo uploads
### END INIT INFO

case "$1" in
    start)
      echo "starting pir photos upload"
      # run appl
      /home/pi/upload_photos_pir.py
      ;;
    stop)
      echo "stopping pir photos upload"
      # kill app
      killall upload_photos_pir.py
      ;;
    *)
      echo "Usage: etc/init.d/upload_photos_pir {start|stop}"
      exit 1
      ;;
esac

exit 0

运行脚本会产生以下结果:

starting pir photos upload
/home/pi/upload_photos_pir.py: 3: /home/pi/upload_photos_pir.py: import: not found
/home/pi/upload_photos_pir.py: 4: /home/pi/upload_photos_pir.py: import: not found
/home/pi/upload_photos_pir.py: 5: /home/pi/upload_photos_pir.py: import: not found
/home/pi/upload_photos_pir.py: 6: /home/pi/upload_photos_pir.py: import: not found
/home/pi/upload_photos_pir.py: 7: /home/pi/upload_photos_pir.py: import: not found
from: can't read /var/mail/time
from: can't read /var/mail/datetime
from: can't read /var/mail/picamera
from: can't read /var/mail/subprocess
/home/pi/upload_photos_pir.py: 13: /home/pi/upload_photos_pir.py: global: not found
/home/pi/upload_photos_pir.py: 16: /home/pi/upload_photos_pir.py: photosHourlyLimit: not found
/home/pi/upload_photos_pir.py: 17: /home/pi/upload_photos_pir.py: photosTaken: not found
/home/pi/upload_photos_pir.py: 18: /home/pi/upload_photos_pir.py: Syntax error: "(" unexpected

我试图启动upload_photos_pir.py 的脚本在python shell 中运行良好。

我不明白为什么导入没有按应有的方式发生。我是 Raspberry Pi 和 python 的新手,所以在路径、文件位置等方面我不确定很多,所以我猜这个问题与在 #! /bin/sh 文件中使用错误的路径有关,但是连问对问题的知识都不够。

谁能解释什么可能不起作用,如何调试此问题,或指出解释的方向?

非常感谢。

【问题讨论】:

  • chmod +x upload_photos_pir.py了吗?顶部是否有#!/bin/env python(或类似名称)?

标签: python linux raspberry-pi


【解决方案1】:

注意上面你调用了你的python程序

/home/pi/upload_photos_pir.py

我敢打赌,你在这个文件的顶部没有一行看起来像

#!/usr/bin/env python

这意味着你的程序将被 sh / bash 调用。这些错误消息是 bash 在尝试(但失败)解析您的 python 文件时打印的错误消息。

您可以通过两种方式解决此问题:

  • 更改您的脚本以使用python /home/pi/upload_photos_pir.py 调用
  • #!/usr/bin/env python 添加到文件顶部

【讨论】:

  • 如果要添加shebang,请记住chmod +x upload_photos_pir.py
  • 对于 python 3,它将是 #!/usr/bin/env python3
  • @Cireo 非常感谢您的回复。我已阅读有关将 #!/usr/bin/env python 添加到 python 脚本的信息。当我尝试它时,我收到另一个错误:/home/pi/upload_photos_pir: not found。但是,当我尝试您的第一个解决方案时,将 python 添加到通话中,效果很好。
  • 根据您的消息/home/pi/upload_photos_pir: not found,您在进行第一次更改时可能不小心删除了.py。无论如何,最好将#! 放在文件的顶部 =)。很高兴它有帮助
  • 唉,'killall` 也不起作用。我得到/home/upload_photo_pir.py: no process found. 即使`ps aux | grep unpload_photos_pir.py 确实显示了一个以 root 身份运行的进程。
猜你喜欢
  • 2018-01-25
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 2018-12-19
  • 2018-07-31
  • 2020-08-05
相关资源
最近更新 更多