pyinstaller 怎么用相对路径
时间: 2023-07-06 15:35:39 浏览: 181
使用 Pyinstaller 打包 Python 代码时,可以使用 `--add-data` 参数来指定需要打包的数据文件,其中的路径可以使用相对路径。
例如,假设你的 Python 代码文件(`main.py`)和一个数据文件(`data.txt`)都在同一个目录下,你可以使用以下命令来打包:
```
pyinstaller --add-data "data.txt:." main.py
```
这里使用了相对路径 `.` 来表示当前目录,`data.txt` 和 `main.py` 都在该目录下。
在代码中,你可以使用 `sys._MEIPASS` 来获取打包后的程序运行时的路径,例如:
```python
import sys
import os
if getattr(sys, 'frozen', False):
# 如果是打包后的程序,获取程序运行时的路径
path = sys._MEIPASS
else:
# 否则获取当前文件所在的路径
path = os.path.dirname(__file__)
# 使用相对路径来读取数据文件
data_path = os.path.join(path, 'data.txt')
with open(data_path, 'r') as f:
data = f.read()
print(data)
```
这里使用了 `os.path.join` 来拼接路径,确保代码能够在不同操作系统下正常工作。
相关问题
pyinstaller相对路径
当使用PyInstaller将Python脚本打包成可执行文件后,由于可执行文件在运行时的工作目录并不一定是脚本所在目录,因此需要使用相对路径来访问程序所需的文件。在PyInstaller中使用相对路径时,可以使用以下方法:
1. 使用os模块的相对路径函数:可以使用os模块的path.join()函数来构建相对路径。例如,如果要访问脚本所在目录下的data文件夹中的file.txt文件,可以使用以下代码:
```
import os
# 获取脚本所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 构建相对路径
rel_path = "data/file.txt"
abs_file_path = os.path.join(script_dir, rel_path)
# 读取文件内容
with open(abs_file_path, "r") as f:
content = f.read()
```
2. 使用sys._MEIPASS变量:在使用PyInstaller打包时,可以使用sys._MEIPASS变量获取打包后的文件所在目录。例如,如果要访问打包后程序所在目录下的data文件夹中的file.txt文件,可以使用以下代码:
```
import sys
import os
# 获取打包后程序所在目录
bundle_dir = getattr(sys, '_MEIPASS', os.path.abspath(os.path.dirname(__file__)))
# 构建相对路径
rel_path = "data/file.txt"
abs_file_path = os.path.join(bundle_dir, rel_path)
# 读取文件内容
with open(abs_file_path, "r") as f:
content = f.read()
```
pyinstaller打包后图片没有显示,怎么用相对路径呢
你可以使用Python中的os模块来获取打包后的可执行文件所在的绝对路径,然后再使用相对路径加载图片。以下是一个示例代码:
```python
import os
import sys
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("Hello World")
self.setWindowIcon(QIcon("icon.png"))
self.label = QLabel(self)
self.label.setGeometry(10, 10, 200, 200)
self.label.setPixmap(QPixmap("image.png"))
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = MainWindow()
# 获取打包后的可执行文件所在的绝对路径
base_path = os.path.abspath(os.path.dirname(sys.argv[0]))
# 使用相对路径加载图片
main_window.setWindowIcon(QIcon(os.path.join(base_path, "icon.png")))
main_window.label.setPixmap(QPixmap(os.path.join(base_path, "image.png")))
main_window.show()
sys.exit(app.exec_())
```
在上面的代码中,我们使用os模块中的abspath函数获取当前打包后的可执行文件所在的绝对路径,然后使用os模块中的join函数将相对路径和绝对路径拼接起来,以此来加载图片。
阅读全文