linux shell调用python,如何运行从任意位置调用Python脚本的Bash脚本?

我有一个Python脚本,例如myscript.py,它使用相对的模块导入,即从.. import module1导入,我的项目布局如下:

project

+ outer_module

- __init__.py

- module1.py

+ inner_module

- __init__.py

- myscript.py

- myscript.sh

我有一个Bash脚本,例如myscript.sh,它是我的python脚本的包装,如下所示:

#!/bin/bash

python -m outer_module.inner_module.myscript $@

这可以执行myscript.py并根据需要将参数转发到我的脚本,但是仅当我从上面显示的项目目录中调用./outer_module/inner_module/myscript.sh时,此方法才有效.

如何使该脚本在任何地方都能工作?例如,如何使此工作适用于bash /root/to/my/project/outer_module/inner_module/myscript.sh这样的调用?

这是我的尝试:

从其他任何地方执行myscript.sh时,都会出现错误:没有名为external_module.inner_module的模块.然后,我尝试了另一种方法,可以通过将myscript.sh替换为在任何地方执行bash脚本的方法:

#!/bin/bash

scriptdir=`dirname "$BASH_SOURCE"`

python $scriptdir/myscript.py $@

当如上所述执行myscript.sh时,得到以下信息:

Traceback (most recent call last):

File "./inner_module/myscript.py", line 10, in

from .. import module1

ValueError: Attempted relative import in non-package

如前所述,这是由于myscript.py第一行中的相对导入而来的,该相对导入来自.. import module1.

解决方法:

您需要在PYTHONPATH环境变量中包括外部模块的父目录的路径,然后可以在任何地方使用在第一个脚本中使用的相同命令.

PYTHONPATH是python搜索您尝试导入的任何模块的位置:

#!/bin/bash

export PYTHONPATH=$PYTHONPATH:PATH/TO/MODULE/PARENTDIR

python -m outer_module.inner_module.myscript $@

标签:bash,shell,linux,python

来源: https://codeday.me/bug/20191029/1956565.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值