我想从我的python脚本生成一个可执行文件。 为此,我使用pyinstaller。我遇到了mkl库的问题,因为我在脚本中使用了numpy。
我使用了这个hook所以解决了这个问题,它运行正常。但是如果我将单个可执行文件复制到另一个目录并执行它,它就不起作用。我想我也要复制钩子。但我只想拥有一个单独的文件,我可以在其他计算机上使用而无需复制.dll's
或钩子。
我还按照here所述更改了.spec
文件,并将必要的文件添加到binaries
- 变量中。只要.dll's
位于binaries
- 变量的提供目录中,这也有效,但是当我在没有这些{{1}的计算机上使用可执行文件时,这不起作用}}
我尝试使用.dll's
选项。这也解决了这个问题,但只是在某处提供--hidden-import= FILENAME
时。
我正在寻找的是将.dll's
捆绑到单个可执行文件中的可能性,以便我有一个独立工作的文件。
答案 0 :(得分:5)
当我遇到这里描述的问题时 https://github.com/ContinuumIO/anaconda-issues/issues/443 我的解决方法是
$scope.$storage = $localStorage;
$scope.InfoInter = $localStorage.InfoInter;
$scope.newInfoInter = {};
$scope.addInfoInter=function(){
/* AD(added later): I added this line to test and initialize the variable and my issue disapeard */
if (typeof($scope.InfoInter) == 'undefined'){$scope.InfoInter=[]};
$scope.InfoInter.push($scope.newInfoInter);
$scope.newInfoInter = {};
$scope.save();
};
$scope.remove = function(item) {
var index = $scope.InfoInter.indexOf(item);
$scope.InfoInter.splice(item, 1);
};
$scope.save = function() {
$localStorage.InfoInter = $scope.InfoInter;
};
$scope.load = function() {
$scope.InfoInter = $localStorage.InfoInter;
};
});
pyinstaller -F --add-data vcruntime140.dll;. myscript.py
- 收集到一个 * .exe 文件
-F
- exe文件中dll的目标路径
来自docs http://pyinstaller.readthedocs.io/en/stable/spec-files.html#adding-data-files
答案 1 :(得分:1)
将当前项目文件夹添加到Path,然后使用以下命令创建EXE:
pyinstaller --add-binary AutoItX3_x64.dll;. program_name.py
在当前项目文件夹中创建文件夹\dist\program_name\autoit\lib
,并将AutoItX3_x64.dll
粘贴到其中。
答案 2 :(得分:0)
由于选择的答案在使用 libportaudio64bit.dll 的情况下不起作用,因此将有效的解决方案放在这里。
对我来说,可行的解决方案是在.exe文件所在的位置添加 _sounddevice_data 文件夹,然后在其中创建一个 portaudio-binaries 文件夹,最后将最新创建的文件夹中的libportaudio64bit.dll 。
希望有帮助!