python - 在 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)提前谢谢
解决方案
推荐阅读
- google-cloud-platform - 无法从谷歌云虚拟机连接到谷歌云 Paas 实例。两者都在不同的地区
- c# - 为什么在 XML 序列化期间将命名空间添加到子节点?
- swift - SwiftUI:在修改 EnvironmentObject 的视图主体中调用函数导致无限循环和应用程序崩溃
- ansible - 在 Ansible 中提取特定模式
- amazon-web-services - 关于来自一个 sqs 队列的多个 lambda
- kotlin - 在 Kotlin 中使用索引迭代 IntArray 的最佳方法
- jenkins - 带有共享库的 Jenkinsfile
- javascript - 使用 ReactJS,如何使用 Route 来显示不同的组件?
- c++ - vivado 2018.2 中的 picorv32 risc-v 实现
- cassandra - Cassandra Datastax Java 驱动程序看不到配置中的环境变量