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 脚本从主目录运行的主要内容,如果未能解决你的问题,请参考以下文章

markdown 使用符号链接从主目录运行站点

XAMPP - 如何从主目录执行 PHP 文件?

停止在另一个 Python 脚本中运行的一个 Python 脚本

为啥我的脚本目录不在 Python sys.path 中?

从主线程的资产目录中加载图像?

如何从主 node.js 脚本运行多个 node.js 脚本?