我正在Windows上使用Pyinstaller制作一个。我的项目的exe文件。
我想使用--onefile
选项来获得一个干净的结果和一个易于分发的文件/程序。
我的程序使用配置。ini
用于存储配置选项的文件。此文件可由用户自定义。
使用--onefile
选项Pyinstaller将所有声明的“数据文件”放入单个中。exe
文件。
我见过这个请求,但它给出了在同一级别的中,在onefile中添加bundle文件,而不是在外部添加的指令。exe
并位于同一个dist
目录中。
在某个时候,我想过在. spec文件中使用shutil.copy命令来复制这个文件...但是我认为是以错误的方式。
有人能帮我吗?我会感激的:-)
我的解决方案类似于@Stefano Giraldi的优秀解决方案。将目录传递给shutil时,我的权限被拒绝。复制文件
。
我最终使用了shutil。复制树
:
import sys, os, shutil
site_packages = os.path.join(os.path.dirname(sys.executable), "Lib", "site-packages")
added_files = [
(os.path.join(site_packages, 'dash_html_components'), 'dash_html_components'),
(os.path.join(site_packages, 'dash_core_components'), 'dash_core_components'),
(os.path.join(site_packages, 'plotly'), 'plotly'),
(os.path.join(site_packages, 'scipy', '.libs', '*.dll'), '.')
]
working_dir_files = [
('assets', 'assets'),
('csv', 'csv')
]
print('ADDED FILES: (will show up in sys._MEIPASS)')
print(added_files)
print('Copying files to the dist folder')
print(os.getcwd())
for tup in working_dir_files:
print(tup)
to_path = os.path.join(DISTPATH, tup[1])
if os.path.exists(to_path):
if os.path.isdir(to_path):
shutil.rmtree(to_path)
else:
os.remove(to_path)
if os.path.isdir(tup[0]):
shutil.copytree(tup[0], to_path )
else:
shutil.copyfile(tup[0], to_path )
#### ... Rest of spec file
a = Analysis(['myapp.py'],
pathex=['.', os.path.join(site_packages, 'scipy', '.libs')],
binaries=[],
datas=added_files,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='myapp',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )
这样可以避免使用_-MEI文件夹,并防止它复制您想要在dist文件夹中而不是临时文件夹中的配置文件。
希望有帮助。
Github上的一个存储库帮助我找到了解决我问题的方法。
我使用了shutil
模块和。spec
file,使用Pyinstaller--onefile
选项将额外的数据文件(在我的示例中是aconfig sample.ini
file)添加到dist文件夹。
首先,我创建了一个makespec文件,其中包含我需要的选项:
$ pyi-makespec --onefile --windowed --name exefilename scriptname.py
这个comand创建一个exefilename.spec
文件与PyInster一起使用
现在我编辑了文件名。spec
在文件末尾添加以下代码。
import shutil
shutil.copyfile('config-sample.ini', '{0}/config-sample.ini'.format(DISTPATH))
shutil.copyfile('whateveryouwant.ext', '{0}/whateveryouwant.ext'.format(DISTPATH))
这段代码复制编译过程结束时所需的数据文件。您可以使用shutil
软件包中提供的所有方法。
最后一步是运行编译进程
pyinstaller --clean exefilename.spec
结果是,在dist文件夹中,您应该已编译该文件。exe文件以及复制的数据文件。
在PyInster的官方留档中,我没有找到获得此结果的选项。我认为这可以被认为是一种变通方法...有效。
问题内容: 情况 我在Windows上使用Pyinstaller制作项目的.exe文件。 我想使用option来获得干净的结果和易于分发的文件/程序。 我的程序使用一个文件来存储配置选项。该文件可以由用户定制。 问题 使用选项Pyinstaller将所有声明的“数据文件”放入单个文件文件中。 我已经看到了这个请求,但它给istructions添加一个包文件 的onefile内部 ,而不是外部的,在
我正在和pyinstaller做斗争。每当我使用kivy GUI和。kv文件,并运行。生成后,我收到一个致命错误: 我已经尝试添加了。kv文件,以及使用--add-data的mdb和dsn文件(对于PyODBC),但我得到一个错误:。(还有更多内容——为提到的其他文件添加数据参数。) 有没有解决这个问题的方法,或者其他的方法?
你知道 Puppet 能做微创手术吗? 通常,我们不希望将整个配置文件交由 Puppet 管理而仅仅是在配置文件中添加某项设置 — 尤其是如果该文件是由别人管理,我们不能覆盖它的情况。 一种简单而有用的方法是,如果配置文件中不存在指定的行就添加这行配置。例如: 添加一个内核模块名到配置文件 /etc/modules 告知内核在启动时加载此模块。 你可以使用一个 exec 资源达成此任务。下面的例子
有了Web框架和ORM框架,我们就可以开始装配App了。 通常,一个Web App在运行时都需要读取配置文件,比如数据库的用户名、口令等,在不同的环境中运行时,Web App可以通过读取不同的配置文件来获得正确的配置。 由于Python本身语法简单,完全可以直接用Python源代码来实现配置,而不需要再解析一个单独的.properties或者.yaml等配置文件。 默认的配置文件应该完全符合本地开
我有一个当地的库伯内特斯环境,我基本上是复制的。将kube/config文件添加到我的本地文件中,并将“上下文”、“用户”和“集群”信息添加到我当前的“.kube/config”文件中。没关系,我可以连接到本地文件。 但是我想用命令将这些信息添加到我的本地配置文件中。 因此,关于这个页面,我可以使用“证书颁发机构数据”作为参数,如下所示:--- 但它会抛出如上所述的错误。我用的是kubernete
我有几个外部文件要添加到jar文件中,并在类中访问这些文件。我使用命令从命令行运行这个jar文件。所以当我使用绝对路径时,我可以访问文件内容,但当我使用相对路径时,我得到。我已将这两个文件都包含在目录中。我试过使用,它们都不起作用。还试图在构建中包含文件。从{[“file1.conf”,“file2.conf”]}中升级