在rc.local中启动时出现python脚本问题(没有名为...的模块)

时间:2012-12-11 00:13:56

标签: python dependency-management

我面临一个奇怪的问题,经过几个小时的研究后,我正在寻找关于这个问题的帮助/解释。 这很简单,我在python中编写了一个cgi服务器,我正在使用包括pynetlinux在内的一些库。 当我从任何用户的终端启动脚本时,它工作正常,没有错误,没有依赖问题。但是当我尝试使用rc.local中的脚本启动它时,以下代码会产生错误。

import sys, cgi, pynetlinux, logging

它会产生以下错误:

   Traceback (most recent call last):
      File "/var/simkiosk/cgi-bin/load_config.py", line 3, in 
      import cgi, sys, json, pynetlinux, loggin
   ImportError: No module named pynetlinux

其他依赖项会产生类似的问题。我怀疑一些事情,例如用户在rc.local(root normaly)中执行脚本并尝试在网络上找到的一些内容但没有成功。

有人可以帮助我吗?

提前完成。

问候。

Ollie314

2 个答案:

答案 0 :(得分:2)

首先,您需要确保是否正确安装了要导入的模块。您可以在pip list

中检查模块的名称是否存在


然后,在python shell中,检查Python正在寻找模块的路径:

    import sys
    sys.path

就我而言,输出是:

['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']


最后,将这些路径附加到/etc/rc.local中的$ PATH变量。这是我的rc.local的一个例子:

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing

    export PATH="$PATH:/usr/lib/python3.4:/usr/lib/python3.4/plat-x86_64-linux-gnu:/usr/lib/python3.4/lib-dynload:/usr/local/lib/python3.4/dist-packages:/usr/lib/python3/dist-packages"

    # Do stuff

    exit 0

答案 1 :(得分:1)

安装模块的路径通常可能来自.bashrc或类似的东西。当.bashrc不是交互式shell时,它不会被获取。 / etc / profile是一个可以放置系统范围路径更改的地方。根据/etc/profile.d/可能使用的Linux版本/发行版/ / etc / profile运行/etc/profile.d中的所有脚本,在那里添加一个带有执行权限和.sh扩展的新shell脚本