我正在尝试将图像添加到Pyinstaller生成的一个文件中。我已经阅读了许多类似one和one这样的问题/论坛,但仍然无法正常工作。
我知道,对于一个文件操作,Pyinstller会产生一个<!DOCTYPE html>
<html>
<head>
<title>Login form</title>
<link rel="stylesheet" type="text/css" href="Login Form CSS.css">
<script src="Registration function.js" defer></script>
<body>
<div class="loginbox">
<img src="Logo.jpg" class="avatar">
<h1> Create Account </h1>
<form name="login-form">
<div id="forename_confirmation"> Please fill in this box </div>
<div id="forename_chars"> Don't use special characters</div>
<p>Forename
<p>
<input type="text" name="forename" id="forename" placeholder="Enter Forename here">
<div id="surname_confirmation"> Please fill in this box </div>
<div id="surname_chars"> Don't use special characters</div>
<p>Surname
<p>
<input type="text" name="surname" id="surname" placeholder="Enter Surname here">
<div id="username_confirmation"> Please fill in this box </div>
<div id="username_chars"> Don't use special characters</div>
<p>Username
<p>
<input type="text" name="username" id="username" placeholder="Enter Username here">
<div id="pass_confirmation"> Please fill in this box </div>
<div id="pass_chars">Don't use special characters</div>
<p>Password
<p>
<input type="password" name="password" id="password" placeholder="Enter Password here">
<div id="repass_confirmation"> Passwords do not match </div>
<p>Re-enter Password
<p>
<input type="password" name="re_password" id="re_password" placeholder="Re-enter your password here">
<div id="email_confirmation"> Please enter a valid email </div>
<p>Email
<p>
<input type="email" name="email" id="email" placeholder="Enter Email here">
<!--
<p>Gender<p>
<input type="radio" id="Male" name="Gender" value="Male">Male</input>
<input type="radio" id="Female" name="Gender" value="Female">Female</input>
-->
<button onclick="validate_form(event)" type="Submit" value="True" name="button-submit"> Submit </button>
<br />
<br />
<a href="#"> Forgot your password? </a>
<br />
<a href="#"> Already got an account? </a>
<br /><br />
</form>
<!-- <button onclick="validate_form()" type="submit"> Validate </button> -->
</div>
</body>
</head>
<script>
forename_confirmation.style.visibility = 'hidden'
forename_chars.style.visibility = 'hidden'
surname_confirmation.style.visibility = 'hidden'
surname_chars.style.visibility = 'hidden'
username_confirmation.style.visibility = 'hidden'
username_chars.style.visibility = 'hidden'
pass_confirmation.style.visibility = 'hidden'
pass_chars.style.visibility = 'hidden'
repass_confirmation.style.visibility = 'hidden'
email_confirmation.style.visibility = 'hidden'
</script>
</body>
</html>
可以到达的临时文件夹。但是我不知道 我应该在脚本的确切位置添加 sys.MEIPASS
。
请显示以下内容:
1- 在何处以及如何添加 sys.MEIPASS
?在python脚本中还是在spec文件中?
2-要使用的确切命令是什么?我已经尝试过
sys.MEIPASS
或
pyinstaller --onefile --windowed --add-data="myImag.png;imag" myScript.py
,然后将('myImag.png','imag')添加到规范文件,然后运行
pyinstaller --onefile --windowed myScript.py
没有一个工作。
注意:我在Windows 7下有python 3.6
答案 0 :(得分:2)
使用PyInstaller打包为单个文件时,运行.exe将把所有内容解压缩到TEMP目录中的文件夹中,运行脚本,然后丢弃这些临时文件。每次运行时,临时文件夹的路径都会更改,但是会将其位置的引用作为sys
添加到sys._MEIPASS
。
要利用这一点,当您的Python代码读取也会打包到.exe中的任何文件时,您需要将文件位置更改为位于sys._MEIPASS
下。换句话说,您需要将其添加到您的python代码中。
以下是一个示例,该示例使用您引用的链接中的代码将文件路径打包到单个文件时,将文件路径调整为正确的位置。
# data_files/data.txt
hello
world
# myScript.py
import sys
import os
def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
def print_file(file_path):
file_path = resource_path(file_path)
with open(file_path) as fp:
for line in fp:
print(line)
if __name__ == '__main__':
print_file('data_files/data.txt')
使用以下选项运行PyInstaller会将文件打包:
pyinstaller --onefile --add-data="data_files/data.txt;data_files" myScript.py
构建myScript.exe,该脚本可以正常运行,并且可以打开和读取打包的数据文件。
答案 1 :(得分:0)
这是我最终使用的命令提示符命令提示符,因为我的.spec无法正常工作。 它排除了形状,然后将其重新添加(pyinstaller很难将其编译到--onefile中,因此我必须“手动”添加模块)。这显示了如何添加文件夹而不只是文件。
pyinstaller --clean --win-private-assemblies --onefile --exclude-module shapely --add-data C:\ Python27 \ Lib \ site-packages \ shapely;。\ shapely --add-data C :\ Python27 \ tcl \ tkdnd2.8; tcl main.py
答案 2 :(得分:0)
我尝试更改了python脚本的工作目录,但似乎可行:
import os
import sys
os.chdir(sys._MEIPASS)
os.system('included\\text.txt')
我的pyinstaller命令:
pyinstaller --onefile --nowindow --add-data text.txt;included winprint.py --distpath .
答案 3 :(得分:0)
通过以下方式访问temp文件夹的更简单方法:
bundle_dir = getattr(sys, '_MEIPASS', path.abspath(path.dirname(__file__)))
data_path = os.path.abspath(path.join(bundle_dir, 'data_file.dat'))
从阅读文档中得到它