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

在rc.local中启动时出现python脚本问题(没有名为…)的模块,python,dependency-management,Python,Dependency Management,我正面临一个奇怪的问题,经过几个小时的研究,我正在寻找关于这个问题的帮助/解释。 这很简单,我用python编写了一个cgi服务器,我正在使用一些LIB,例如pynetlinux。 当我与任何用户从终端启动脚本时,它工作正常,没有bug,没有依赖性问题。但是当我试图使用rc.local中的脚本启动它时,下面的代码会产生一个错误 导入系统、cgi、pynetlinux、日志 它会产生以下错误: Traceback (most recent call last): File "/va

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

导入系统、cgi、pynetlinux、日志

它会产生以下错误:

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中执行脚本,并尝试在web上找到的一些东西,但没有成功

有人能帮我吗

提前准备好

问候


Ollie314

安装模块的路径通常可能是由.bashrc或类似程序提供的。当bashrc不是交互式shell时,它不会获得源代码/etc/profile是一个可以进行系统范围路径更改的地方。根据它可能使用的Linux版本/发行版/etc/profile.d/在这种情况下/etc/profile运行/etc/profile.d中的所有脚本,在那里添加一个具有执行权限和.sh扩展名的新shell脚本。

安装模块的路径通常可能由.bashrc或类似的东西提供。当bashrc不是交互式shell时,它不会获得源代码/etc/profile是一个可以进行系统范围路径更改的地方。根据它可能使用的Linux版本/发行版/etc/profile.d/在这种情况下/etc/profile运行/etc/profile.d中的所有脚本,在那里添加一个具有执行权限和.sh扩展名的新shell脚本。

首先,您需要确保要导入的模块是否正确安装。您可以检查pip列表中是否存在模块的名称

然后,在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

首先,您需要确保要导入的模块是否安装正确。您可以检查pip列表中是否存在模块的名称

然后,在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