Python 脚本从主目录运行
Posted
技术标签:
【中文标题】Python 脚本从主目录运行【英文标题】:Python script runs from home directory 【发布时间】:2019-02-11 13:28:59 【问题描述】:我有一个 pyinstaller 可执行文件 (pyinstaller -F script.py
) 和 .db
文件。两者都在/home/dev/dist
目录中。尽管该脚本位于同一目录中,但该脚本无法找到 .db
文件。我发现脚本总是从/home
目录运行。
如何将路径从/home
更改为脚本运行的实际目录?我不知道它是 macOS 还是 pyinstaller 功能。
P.S.:我不需要将 .db
文件添加到可执行文件中。它应该是分开的,但与脚本在同一目录中
【问题讨论】:
Bundling data files with PyInstaller (--onefile)的可能重复 【参考方案1】:import os
os.chdir("Your Path")
我不知道这是不是你要找的,但你也可以试试:
import glob
glob.glob("Your Path/*.db") #This will show all files with .db extension in path
您可以使用列表索引运行 .db 文件
【讨论】:
好的,但是如何获取真实路径?os.path.dirname(os.path.realpath(__file__))
返回/home
。路径不是静态的,它会因用户而异【参考方案2】:
我有同样的问题。 它实际上并没有在主目录中运行,只是在 PyInstaller 中编译后由于某种原因更难找到真正的目录。 PyInstaller 文档建议在您的代码中使用以下内容来获取真实路径:
import sys, os
if getattr(sys, 'frozen', False):
# If the application is run as a bundle, the pyInstaller bootloader
# extends the sys module by a flag frozen=True and sets the app
# path into variable _MEIPASS'.
dir_path = sys._MEIPASS
else:
dir_path = os.path.dirname(os.path.abspath(__file__))
一旦你有了真正的路径,你就可以连接:
real_file_location = f'dir_path/my_file.db'
就是这样。确保在构建可执行文件时使用--add-data
运算符来指定程序需要的文件。示例:
% pyinstaller --add-data my_file.db:. --add-data another_file.json:. /directory/to/your/code/script.py
这些东西应该确保你的 PyInstaller 可执行文件可以找到它需要的文件。
【讨论】:
以上是关于Python 脚本从主目录运行的主要内容,如果未能解决你的问题,请参考以下文章