详解Python执行py文件是否需要可执行权限

 更新时间:2023年03月13日 14:59:37   作者:DECHIN  
这篇文章主要通过几个案例为大家详细介绍一下在Python中执行py文件是否需要可执行权限,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以了解一下

案例解析

这个问题描述起来有点违反直觉,要执行一个文件难道不应该需要可执行权限吗?让我们先来看一个例子:

# module1.py
def test():
    print ('hello world!')
 
if __name__ == '__main__':
    test()

这是一个名为module1.py的文件,这个文件仅有可读权限:

[dechin@dechin-manjaro excute]$ ll
-r--r--r-- 1 dechin dechin   78  1月 15 17:06 module1.py

我们可以直接用python来运行一下这个文件:

[dechin@dechin-manjaro excute]$ python3 module1.py 
hello world!

我们发现即使只有可读权限,这个文件也是可以运行的。为了严格验证,我们这里创建另外一种模式的测试,通过import来导入python文件,是否也不需要可执行权限呢?

# module2.py
from module1 import test
 
if __name__ == '__main__':
    test()

同样的,我们新建的文件也未赋予可执行权限:

[dechin@dechin-manjaro excute]$ ll
-r--r--r-- 1 dechin dechin   78  1月 15 17:06 module1.py
-r--r--r-- 1 dechin dechin   64  1月 15 17:44 module2.py

我们执行一下module2.py这个文件:

[dechin@dechin-manjaro excute]$ python3 module2.py 
hello world!

那么我们的测试就完成了,经过验证,执行普通的py文件是不需要可执行权限的,这对我们的权限最小化约束就产生了一定的启发作用。

原理解释

在stackoverrun上面有一条回复,作者cedbeu是这样描述的:python本身承担了语言解析器的角色,py文件不过是一个文本文件,真正执行的二进制文件是python而不是用户所创建的py文件。因此,即使去掉py文件的可执行权限,该py文件也是可以通过python来执行的。但是,如果我们去掉了python的可执行权限,那就无法正常执行这一条任务了。

扩展测试

如果将py文件编译成pyc和pyo格式的文件,此时的任务执行是否需要可执行权限呢?首先测试pyc文件:

[dechin@dechin-manjaro excute]$ python3 -m py_compile module1.py

执行完编译,我们会在当前目录下发现一个__pycache__的文件夹,编译好的pyc文件就存储在这个目录下:

[dechin@dechin-manjaro excute]$ tree
.
├── module1.py
├── module2.py
└── __pycache__
    └── module1.cpython-38.pyc
 
1 directory, 3 files
[dechin@dechin-manjaro excute]$ cd __pycache__/
[dechin@dechin-manjaro __pycache__]$ ll
总用量 4
-rw-r--r-- 1 dechin dechin 259  1月 15 18:01 module1.cpython-38.pyc

这里我们看到pyc文件的文件名会固定有个后缀,同样也没有可执行权限,这里我们用同样的命令来执行pyc文件:

[dechin@dechin-manjaro __pycache__]$ ll
-r--r--r-- 1 dechin dechin 259  1月 15 18:01 module1.cpython-38.pyc
-rw-r--r-- 1 dechin dechin 259  1月 15 18:13 module1.pyc
-r--r--r-- 1 dechin dechin  64  1月 15 18:09 module2.py
[dechin@dechin-manjaro __pycache__]$ python3 module1.cpython-38.pyc 
hello world!
[dechin@dechin-manjaro __pycache__]$ python3 module2.py 
hello world!

这里我们可以发现,不论是直接执行pyc文件,或者是改名为module1.pyc之后再通过module2.py导入的方式,都可以正常的被执行,而且都不具有可执行权限。接下来我们再尝试一下pyo文件:

[dechin@dechin-manjaro excute]$ python3 -O -m py_compile module1.py 

执行带有opt的pyc文件:

[dechin@dechin-manjaro __pycache__]$ python3 module1.cpython-38.opt-1.pyc 
hello world!

同样的,都可以正常的被执行,即使没有可执行权限。

技术彩蛋

即使我们把pyc文件强行改名为py文件,同样也是不影响任务执行的:

[dechin@dechin-manjaro __pycache__]$ cp module1.cpython-38.opt-1.pyc module1.py
[dechin@dechin-manjaro __pycache__]$ ll
总用量 20
-rw-r--r-- 1 dechin dechin 259  1月 15 18:17 module1.cpython-38.opt-1.pyc
-r--r--r-- 1 dechin dechin 259  1月 15 18:01 module1.cpython-38.pyc
-rw-r--r-- 1 dechin dechin 259  1月 15 18:20 module1.py
-rw-r--r-- 1 dechin dechin 259  1月 15 18:13 module1.pyc
-r--r--r-- 1 dechin dechin  64  1月 15 18:09 module2.py
[dechin@dechin-manjaro __pycache__]$ python3 module1.py
hello world!

到此这篇关于详解Python执行py文件是否需要可执行权限的文章就介绍到这了,更多相关Python执行py文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中装饰器和魔法方法的区别解析

    Python中装饰器和魔法方法的区别解析

    在Python中,装饰器(Decorators)和魔法方法(Magic Methods)是两种不同的高级特性,分别服务于不同的目的,这篇文章主要介绍了Python中装饰器和魔法方法的区别,需要的朋友可以参考下
    2024-03-03
  • Python基础知识之推导式详解

    Python基础知识之推导式详解

    这篇文章主要介绍了Python基础知识之推导式详解,Python推导式是一种简洁高效的代码编写方式,可以用一行代码来创建列表、集合、字典等复杂数据结构,需要的朋友可以参考下
    2023-07-07
  • Python中的Joblib库使用学习总结

    Python中的Joblib库使用学习总结

    这篇文章主要介绍了Python中的Joblib库使用学习总结,Joblib是一组在Python中提供轻量级流水线的工具,Joblib已被优化得很快速,很健壮了,特别是在大数据上,并对numpy数组进行了特定的优化,需要的朋友可以参考下
    2023-08-08
  • tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解

    tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详

    这篇文章主要介绍了tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-06-06
  • django虚拟环境(virtualenv)的创建

    django虚拟环境(virtualenv)的创建

    在使用django开发项目的时候,一个环境只能对应一个项目,若不安装虚拟环境、都装在系统里面,每次项目加载都需要加载所有的安装包,本文就介绍django虚拟环境的安装,感兴趣的可以了解一下
    2021-08-08
  • 浅谈Python中对象是如何被调用的

    浅谈Python中对象是如何被调用的

    本文主要介绍了浅谈Python中对象是如何被调用的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • python pyecharts 实现一个文件绘制多张图

    python pyecharts 实现一个文件绘制多张图

    这篇文章主要介绍了python pyecharts 实现一个文件绘制多张图,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 详解如何使用Python实现过滤指定进程

    详解如何使用Python实现过滤指定进程

    Python提供了多种方式来实现对进程的过滤和操作,本文将介绍如何利用Python来过滤指定进程,并展示一些实用的技巧和方法,希望对大家有所帮助
    2024-04-04
  • 详解Python网络爬虫功能的基本写法

    详解Python网络爬虫功能的基本写法

    这篇文章主要介绍了Python网络爬虫功能的基本写法,网络爬虫,即Web Spider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛,对网络爬虫感兴趣的朋友可以参考本文
    2016-01-01
  • Python 爬虫图片简单实现

    Python 爬虫图片简单实现

    这篇文章主要介绍了Python 爬虫图片简单实现的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论