【问题标题】:Issue with the import of opentype when python script is started from rc.local从 rc.local 启动 python 脚本时导入 opentype 的问题
【发布时间】:2019-07-31 08:30:30
【问题描述】:

我想做的是在 Raspbian 启动时执行 python 脚本。我这样做的方式是这样写:

#!/bin/sh -e
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
/usr/bin/python /home/pi/Desktop/MyProj/sample/main.py > /home/pi/Desktop/projStartup.log 2>&1 &
exit 0

它的编写方式基本上意味着我将它作为一个分叉进程启动('&' 在最后)并且每个日志都应该进入 projStartup.log 文件。

当我打开终端并输入:

pi@raspberrypi:~ $ /etc/rc.local

一切正常,但是当我尝试重新启动我的 Raspbian 时,我收到以下错误(错误堆栈顶部):

File "/home/pi/Desktop/MyProj/sample/firebaseManager.py", line 1, in <module>
    from pyrebase import pyrebase
  File "/usr/local/lib/python2.7/dist-packages/pyrebase/__init__.py", line 1, in <module>
    from .pyrebase import initialize_app
  File "/usr/local/lib/python2.7/dist-packages/pyrebase/pyrebase.py", line 17, in <module>
    from oauth2client.service_account import ServiceAccountCredentials
  File "/usr/local/lib/python2.7/dist-packages/oauth2client/service_account.py", line 26, in <module>
    from oauth2client import crypt
  File "/usr/local/lib/python2.7/dist-packages/oauth2client/crypt.py", line 23, in <module>
    from oauth2client import _pure_python_crypt
  File "/usr/local/lib/python2.7/dist-packages/oauth2client/_pure_python_crypt.py", line 24, in <module>
    from pyasn1_modules.rfc2459 import Certificate
  File "/usr/local/lib/python2.7/dist-packages/pyasn1_modules/rfc2459.py", line 20, in <module>
    from pyasn1.type import opentype
ImportError: cannot import name opentype

如您所见,opentype 的导入存在问题。我的脚本正在使用的其他模块也有类似的问题,解决方案是使用以下方法全局安装它们:

sudo pip install ...

所以,现在我想知道需要在全球范围内更新哪些内容才能避免这个 opentype 问题。

【问题讨论】:

  • 一般来说,你的程序所依赖的每个外部模块。在少数情况下,您可以通过cd /home/pi/Desktop/MyProj/sample &amp;&amp; /sr/bin/python main.py &gt; ../projStartup.log 2&gt;&amp;1 &amp; 获得幸运,但通常您需要编写一个setup.py 文件并全局安装您的包。
  • 它在我的情况下不起作用。我仍然得到同样的错误。你认为这可能有帮助吗:stackoverflow.com/questions/47600597/…
  • 如果您可以从 shell 运行命令,则不会。如果你先cd /etc 然后sudo rc.local 可以吗? (这是正常运行 rc.local 的工作目录和用户)
  • 我无法像这样启动 rc.local。我得到 sudo: rc.local: command not found 但如果我这样做: /etc/rc.local 从根目录它可以工作。如果我把 'sudo' 放在前面(sudo /etc/rc.local),我会得到同样的 opentype 错误。
  • 好的,那是因为 root 用户无权访问您作为 pi 用户安装的模块。也许(在 rc.local 中)su pi /usr/bin/python /home/pi/Desktop/MyProj/sample/main.py .. 会让你到达那里..?

标签: python raspbian python-module opentype


【解决方案1】:

正如@thebjorn 建议的那样

解决方案:我的解决方案是明确设置 pi 用户(我登录时使用的用户)。

sudo -H -u pi /usr/bin/python /home/pi/Desktop/MyProj/sample/main.py > /home/pi/Desktop/projStartup.log 2>&1 &

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    相关资源
    最近更新 更多