首页 > 解决方案 > 在 python3 中使用 python -m 选项将 python 脚本作为模块执行时出错

问题描述

我正在将我的代码从 python2 迁移到 python3
,并且我正面临 python3 -m 命令的以下问题。

我有一个 python 脚本,在某些情况下可能是编译的(.pyc)或非编译的(.py)
,所以我不确定它是 .py 还是 .pyc,但我想执行它

所以在python2中,如果我必须执行那个脚本,我会简单地做
/usr/bin/python2 -m <path-to-script-without-extension>

在上述情况下,我不需要指定它是 .py 还是 .pyc

但是在python3中,如果我这样做,
/usr/bin/python3 -m <path-to-script-without-extension>
我会得到
/usr/bin/python3: No module named <path-to-script-without-extension>

执行 python 脚本的另一种方法是做,
/usr/bin/python3 <path-to-script>
但为了得到<path-to-script>我需要知道脚本是否以 .py 或 .pyc 结尾

考虑以下示例

root@geek:~# cat /tmp/script.py
#!/usr/bin/python3
print("Python script executed") # This syntax works for python2 as well as python3

root@geek:~# ls -l /tmp/script.py # Making sure the script is executable
-rwxr-xr-x 1 root root 100 Mar 19 05:49 /tmp/script.py

root@geek:~# /usr/bin/python2 -m /tmp/script # The syntax that used to work in python2
Python script executed

root@geek:~# /usr/bin/python3 -m /tmp/script # not working in python3
/usr/bin/python3: No module named /tmp/script

root@geek:~# env PYTHONPATH="/tmp" /usr/bin/python3 -m /tmp/script # Even tried setting PYTHONPATH but didn't work :(
/usr/bin/python3: No module named /tmp/script

root@geek:~# /usr/bin/python3 -c 'import sys; sys.path.append("/tmp");import script;' # Added path to sys.path, and it worked but looks more like a workaround
Python script executed

有没有办法执行我们不知道扩展名的python脚本(它可以是.py或.pyc)提前谢谢

标签: pythonpython-3.xpython-2to3

解决方案


推荐阅读