我面临一个奇怪的问题,经过几个小时的研究后,我正在寻找关于这个问题的帮助/解释。 这很简单,我在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
答案 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脚本