Python 运行时的目录信息

Pyinstaller打包后__file__定位当前绝对路径错误 crontab要求在代码中写绝对路径但pyinstaller打包后的python读取的所在文件绝对路径是/tmp, 而不是当前路径所以分成两种情况,判断是否是打包后的文件,还是.py脚本获取当前文件夹,分情况获取路径。 阅读详情

摘要说明:

在 python 执行过程中,会涉及各种目录信息,了解各种目录的含义和获取方式,可以让我们更好地进行代码控制,并进行相应的处理。

一. 操作场景说明

1. 几个目录和文件

  1. Windows的命令行窗口所在目录 : c:\workspace 
  2. python 的解释器执行文件: c:\env\python.exe 
  3. python 的源代码启动文件: c:\source\main.py 

2. 操作步骤

  1. 在Windows操作系统中,打开一个 Command 命令窗口
  2. CD c:\workspace,  进入目录 c:\workspace
  3. 在 c:\workspace 命令行窗口中, 运行命令: c:\env\python.exe  c:\source\main.py

3. 目录信息

在以上python 运行状态下, 需要理解其中存在的3个目录信息,

  1. 当前的工作目录  : c:\workspace\         
  2. 当前 Python 系统的安装目录  : c:\env\ 
  3. 当前 Python 项目的启动根目录  : c:\source\

二. Python 目录的理解和处理

1. 当前的工作目录

  •     内置模块 os, 指的是操作系统,通过 os.getcwd(), 可获得当前运行状态下的工作目录
  •     改变当前工作目录,可用 os.chdir()
  •     os 对相对路径的操作,是以当前的工作目录为主目录进行处理的,比如 os.mkdir()

2. 当前项目的启动根目录

  •    在项目启动文件中

                 通过 __file__ , 可获得项目启动文件全称文件名

                 通过 os.path.dirname(__file__) , 可获得项目启动根目录

  •    在项目任何文件中

                通过 sys.argv[0], 可获得项目启动文件全称文件名

                通过 os.path.dirname(sys.argv[0]) , 可获得项目启动根目录

  •   当前 Python 项目的启动根目录,将会自动加入到 sys.path 中的第1个查找元素位置,即  sys.path = 项目启动根目录 + 其他 sys.path

  • 大部分情况下,会先进入 python 项目启动文件所在的目录,然后再进行执行;这时,当前工作目录跟项目启动根目录则为同一目录

3. 当前Python系统的安装目录

  •     内置模块 sys, 指的是 python 解释器系统,而不是操作系统
  •     获得当前运行的 python 解释器的全称文件名:sys.executable
  •     获得当前运行的 python 系统的安装目录:os.path.dirname(sys.executable)
  •     获得进行文件,模块查找次序的路径列表:sys.path,默认包括启动根目录, python 解释器安装时设定的默认库目录, 环境变量 PYTHONPATH 中定义的路径。

4. 文件和模块的查找顺序

  • 若引用的是纯文件名 ,运行时查找顺序是: 当前文件所在的相同目录   --> 项目启动根目录 --> Python 安装的默认库目录  -->  环境变量 PYTHONPATH --> 操作系统的 path 变量

  • 若引用的是模块名,将不再查找当前文件所在的相同目录,而是直接按路径顺序查找: 项目启动根目录 --> Python 安装的默认库目录  -->  环境变量 PYTHONPATH --> 操作系统的 path 变量

5. sys.path 在PyCharm 中的特殊处理

在实际编码时,有时会单独运行项目中的某个任意 python 文件,而不一定每次都从项目启动文件开始执行。 

单独运行某个项目文件时,当前启动根目录将变为单独运行的Python文件所在的目录,而不是项目设计的启动文件所在的启动根目录,这样就有可能造成引用的包或模块查找不到,加载失败。

这是因为项目中的python文件在引用模块时,都是以项目设计的启动根目录为基础进行的相对引用的,而目前这个项目启动根目录不在 sys.path 查找路径列表中,因此造成模块找不到。

但我们在 PyCharm IDE 环境中进行编码调试时, 单独运行某个子目录下的python文件,即使该文件是按项目固定启动根目录进行的模块引用,也没有出现模块引用失败的问题,可以正常运行,这时什么原因?

... ...

这时由于 PyCharm IDE 自身进行了特殊设置和处理。 在 PyCharm 中,可为每一个单独运行的python文件,设置运行时的配置信息: Run 菜单   --> Edit Configurations ..., 其中包含设置项:

  • Add content roots to PYTHONPATH
  • Add  source roots to PYTHONPATH

这2个设置项缺省是被选中的。

因此,在 PyCharm IDE 中运行某个单独 python 文件时, sys.path = 当前启动目录  + 源代码根目录(项目的启动根目录) + 其他系统目录信息;  由于项目的启动根目录已被自动加入到了查找路径列表中,因此,该 python 文件单独运行时,按项目启动根目录进行引用的模块可以正常加载。

目录信息保存到一个新的Word文档 代码主要功能是将Word文档批量转换成PDF,然后将这些PDF文件合并为一个PDF文件,并从合并后的PDF文件中提取目录信息,最后将目录信息保存到一个新的Word文档中。 阅读详情

相关推荐

8.1:如何在Python中创建目录?

总之,对于不同的场景和需求,可以选择不同的方法来创建目录。掌握这些方法可以帮助我们更好地操作文件系统和完成Python程序的开发。

小兔子平安 6451

Python文件及目录操作(目录操作篇)

Python文件及目录操作(目录操作篇)

醉蕤的博客 1万+

Python——运行/调试代码工作目录查看和设置

os、os.chdir()、os.getcwd()

Williamcsj的博客 1848

python工作目录与文件目录

我们util目录中有一个view.py的文件,里面包含了一些工具类和方法# view.pyself.x = xself.y = y我们想要在train.py中调用该怎么办呢?我们以D:\test为工作目录,执行train.py文件,嘿嘿这是因为python在导入包的时候import xxx是以文件路径为基准的,即以train.py为基准,发现train.py的目录中并没有util子目录,因此导入失败。聪明的你做了一个简单的修改发现报了另一个错误。

he_wen_jie的博客 2958

8.8:如何在Python中获取目录信息,如目录大小、文件数量等?

这些方法可以帮助我们了解目录的结构和内容,是 Python 开发中常用的操作。学习这些方法可以提高我们的编程技能,并让我们更加熟练地处理文件和目录相关的任务。

小兔子平安 1229

【python | linux07】OS模块的用法及python换行符问题

有些时候,需要对文件进行重命名、删除等一些操作,Python 的 os 模块中都有这么功能

小鹏linux的博客 4万+

python程序封装后运行卡死_原程序运行良好,Pyinstaller封装后运行出错 的分析

前言昨天决定分享一下最近写的exhentai爬虫程序,参考了这篇文章,看了下里面几个常见打包软件的简介表格(可惜没nuitka)因为是给小白用户使用,做成单个文件形式,只能在Pyinstaller和py2exe之间选择去各自官网看了下,发现py2exe很久没更新了,对python3新版本的支持也不是太好,就决定用Pyinstaller来封装/打包这里略过Pyinstaller的安装和使用,重点说明...

weixin_39610468的博客 1285

unity pc运行包导入glb

本文介绍了在Unity中实现GLB/GLTF模型动态导入的方法。主要使用glTFast插件进行模型导入,配合StandaloneFileBrowser实现文件选择功能。文章提供了详细的插件安装方式(包括国内镜像源),并给出了核心导入脚本代码。脚本实现了模型加载、父对象设置、材质修复等功能,解决了常见的材质显示异常问题。该方法支持编辑器和PC平台,兼容不同版本的glTFastAPI,通过简易UI操作即可完成模型导入,适合需要运行时加载3D模型的Unity项目开发。

懒懒的蓝的博客 544

运行目录,脚本目录,工作目录的区别

名词解释 运行目录,又称为当前工作目录,即最开始运行程序时所在的目录 脚本目录,当前文件目录,指正在运行的程序所在的目录,但当执行另一个程序时,脚本目录也随着变化 工作目录,即环境变量 路径和目录的区别:路径包含执行文件本身,而目录不包含 文件目录示例 test test1 main.py test2 main2.py # main.py import sys,os from test2.main2 import fun1 print('main : ') print(os.pa

Rabbit_483的博客 2331

MC1496乘法器AM调制电路搭建全流程(附Multisim 14.0仿真文件)

本文提供了基于MC1496乘法器搭建AM调制电路的完整实战指南。针对仿真模型缺失的痛点,详细讲解了从晶体管级手动构建MC1496等效模型,到外围电路设计、调制度参数计算与调节,并在Multisim 14.0中进行仿真验证的全流程。通过深度剖析MC1496内部原理与AM信号调制机制,帮助读者获得从仿真到实践的可控设计与排错能力。

weixin_29190169的博客 593

STM32F103C8T6与OV7670摄像头在TFT屏上的实时数字识别系统实现

本文详细介绍了基于STM32F103C8T6单片机和OV7670摄像头实现实时数字识别系统的全过程。系统通过图像采集、预处理、二值化和模板匹配算法,在TFT屏上实时显示识别结果,并针对资源受限的单片机环境提供了内存与性能优化策略,适用于智能家居、工业仪表读数等低成本嵌入式视觉应用场景。

open4的博客 278

PYTHON程序获取当前目录和运行时的拖入文件

import sys print(sys.argv) sys.argv[0]为当前程序路径 如['D:/ker/bianl.py'] sys.argv[1]为拖入图标启动运行程序时,拖入的文件或目录。如双击启动则无此项,此时sys.argv长度为1。

asian3的博客 654

告别虚拟机!在Windows上用WSL+VSCode搞定ArduPilot开发环境(保姆级避坑指南)

本文提供了一份详细的保姆级指南,介绍如何在Windows上使用WSL和VSCode搭建高效的ArduPilot开发环境,告别虚拟机性能损耗。从WSL安装、VSCode配置到ArduPilot固件编译和调试技巧,涵盖开发全流程中的关键步骤和常见问题解决方案,帮助无人机开发者快速构建专业级开发环境。

weixin_42543046的博客 461

python-获取当前文件的目录信息

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基

分享创造奇迹 543

UE5 StateTree实战:用分层状态机重构你的AI行为逻辑(附蓝图配置避坑点)

本文详细介绍了UE5中StateTree分层状态机的实战应用,帮助开发者重构AI行为逻辑。通过核心概念解析、迁移策略、高级技巧和避坑指南,展示了StateTree在灵活性、可维护性和并行处理方面的优势,特别适合复杂AI行为的开发与优化。

weixin_42558257的博客 249

混沌系统在图像加密中的应用(二维离散Hénon混沌映射)

Hénon映射是一种二维离散时间动力系统,由美国数学家Michel Hénon在1976年引入。它是混沌动力系统中的经典模型之一,具有简单的形式和复杂的行为。

weixin_42207434的博客 2490

Python爬取研招网专业目录信息

大家好呀,又见面了!各位即将要考研或者正在考研的小伙伴们快看过来!大家是不是经常为查找和收集关于考研院校的相关信息而烦恼呢,信息又多又繁杂,小编之前也为查找考研院校的信息而摸不着头脑,但是自从学了Python之后,利用Python爬取考研的相关信息简直是so easy~~ 今天小编就带领大家爬取研招网的院校信息,一起来看看吧!

2301_78095812的博客 3057

【OS】AUTOSAR架构下MCAL Modules软件分区问题分析

AUTOSAR架构下MCAL Modules软件分区问题分析

qq_36056498的博客 939

你室友打游戏时,让他断网掉线!明明没断网就是没网!Python黑客!

为了满足新手对Python的追求,特写了三个初级Python入门工具。第一期写了三个初级工具,希望新手看完以后可以对Python的脚本有一个基本了解。高手请绕过此文章! 一件套 pythond requests模块构造一个whois信息收集器 二件套 python编写一个arp断网攻击 三件套 目录信息收集 简单梳理一下此工具需要具备哪些功能。脚本获取信息如下: IP信息 子域名...

1566

Python语言基本语法元素

Python语言的基本语法元素:包括Python程序的格式框架,语法元素名称,数据类型和语句元素以及基本的输入输出函数。

Python全栈系列 8366

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python编程获取《续蜀山剑侠传》目录信息:目录名称和网址

一直很欣赏武侠小说宗师还珠楼主李寿民的扛鼎之作《蜀山剑侠传》,可惜由于种种原因,《蜀山剑侠传》并未写完。这着实令还珠迷们扼腕,也有不少人继写了《蜀山剑侠传》,但是良莠夹杂,其中有一位退休公务员写的《续蜀山剑侠传》相对来说是按照还珠楼主的思路续写的,并且在网上连载了,于是想把它从网上down下来保存为txt文件。顺便练习一下Python编程。首先要获取目录信息,主要是目录名称和网址。...

Purpleendurer@优快云 473

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

python实战代码目录信息

python代码系列: 服务实战: 1.坐标生成示例: 坐标生成.

wtt234的专栏 497

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

使用 python 给 PDF 添加目录书签

使用 python 给 PDF 添加目录书签

我是002的博客 5307

Python随手记(一) 获取目录信息

最近需要处理许多数据文件,常用matlab处理,虽然很方便,但是每次启动慢,很麻烦。用C语言之类的需要考虑细节,处理文件又只是随手用用,感觉不值得花费太多时间。后来发现Python是个不错的选择,小巧方便,因此找些资料开始学习下。入门细节不多说,直接用程序练习。 目的是为了熟悉文件操作,所以想先写个脚本获取当前目录信息的小功能。需要输出的有: 1、 文件名及子目录名 2、 文件大小(单位KB

RaymondCode的专栏 1743

mysql 查询运行目录

python相关学习资料:https://edu.51cto.com/video/3502.htmlhttps://edu.51cto.com/video/1158.htmlhttps://edu.51cto.com/video/4645.html如何实现MySQL查询运行目录 作为一名刚入行的开发者,你可能会遇到需...

weixin_30313365的博客 153

python断网还能用吗_室友打游戏时,让他断网掉线!明明没断网就是没网!Python黑客!...

原标题:室友打游戏时,让他断网掉线!明明没断网就是没网!Python黑客!为了满足新手对Python的追求,特写了三个初级Python入门工具。第一期写了三个初级工具,希望新手看完以后可以对Python的脚本有一个基本了解。高手请绕过此文章!一件套 pythond requests模块构造一个whois信息收集器二件套 python编写一个arp断网攻击三件套 目录信息收集简单梳理一下此工具需要具...

weixin_39650745的博客 244
上一篇: python 虚拟环境的原理分析
下一篇: 基于 Streamlit 框架的 Python 小工具集
快乐清风客
博客等级 码龄19年 191粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值