我已经创建了某些文件夹和文件结构,以使我的项目更易于维护并且随着时间的推移变得灵活。
我以这种形式存储了这些文件夹和python脚本:
/home/ubuntu/main_folder
:在此文件夹中,我具有以下架构:
|-main_foler
|
|-module1
|---script.py
|
|configetl
|---config.py
|
|process.sh
我期待使用可执行脚本执行存储在module1
名称下的文件夹中script.py
的脚本process.sh
:
#!/bin/sh
cd /home/ubuntu/main_folder &&
python3 module1/script.py
执行脚本时出现问题,因为使用的是来自存储在名为的文件夹中的脚本的大量方法configetl
。
error: File "module1/script.py", line 4, in <module> from configetl.config import * ImportError: No module named 'configetl'
如何正确设置脚本sh
以避免这种情况,并在cron中自动安排此脚本?
非常感谢。
您script.py
可能无法访问config.py
,因为该目录configetl
不在script.py
的PYTHONPATH中。
您可以通过从脚本调用时sys.path
在您的列表中打印列表来进行测试。script.py
process.sh
# Inside your script.py before calling any config functions
import sys
print(sys.path)
输出应类似于以下内容:
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/lib/python3.6/site-packages']
要将configetl
目录包括到您的PYTHONPATH中,并使该目录对可见script.py
,您必须将路径追加configetl
到sys.path
列表中:
# Inside your script.py before calling any config functions
import sys
sys.path.append('../')
这会将整个上一级目录附加到您的PYTHONPATH。
如果您只想将configetl
目录添加到PYTHONPATH,则可以执行以下操作:
# Inside your script.py before calling any config functions
import sys
sys.path.append('../configetl')
这将需要对导入config.py
模块的方式进行一些小的更改。您将必须直接导入它,而不使用其父目录名称,例如
from config import *
PS使用星号从python模块导入所有内容被认为是不好的做法。您应该导入整个模块import config
或列出要从该模块导入的对象,例如from config import function_one, function_two
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句