Nuitka 打包pytorch、numpy项目

Nuitka打包就是先略过torch,numpy,pyqt等系统库,运行时缺什么包就从对应python环境中复制相应的包过去就好了。

在我打包完pytorch代码并复制torch和numpy包到根目录后,还是出现了导入失败的问题。经过百度发现是由于numpy版本太高的原因。在我把numpy从1.19.*降到1.16.*之后,重复上述操作就打包成功了。

Nuitka 是一种新型的打包技术,它可以把python代码用c重新编译并运行

nuitka --standalone --mingw64 --show-memory --show-progress --nofollow-imports --output-dir=o index.py

 

发布一个程序

如果python程序中仅仅使用了一些自定义的模块,那么参数--follow-imports就足以达到发布的效果,一个exe外加一个python3x.dll就可以在任何电脑上运行,无论是否安装python(当然架构要对应),然而实际情况往往比较复杂,稍微强大一点的程序都会调用一些第三方库,比如pyqt,numpy,这些模块中调用了大量的pyd或者dll文件。这个时候就需要使用参数--standalone

参数--standalone默认包含参数--follow-imports,即会尝试对所有的引用到的库都进行打包,将这些库中的py或者pyc打包进exe,然后再将所依赖的二进制文件(dll或者pyd)拷贝到exe所在文件夹。只要命令能够执行完成不出错,生成的exe就可以完全脱离python环境独立运行。

如果某些库没有被打包进exe,程序仍会试图通过python3x.dll去搜索路径中查找这些库,然后进行调用,调用方式跟py文件一模一样。

nuitka打包相对来说是比较耗费时间的,特别是针对像pandas这样的大家伙,所以在最终发布之前,可以暂时不对这些库进行打包(--nofollow-imports),而是将这些库手动拷贝到搜索路径中,比如exe同级目录。只要能够找到这些库,程序就能正常运行,否则会提示no module named xxx

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用PyTorch中的torch.from_numpy()函数将numpy.ndarray转换为tensor。例如: import numpy as np import torch # 创建一个numpy数组 arr = np.array([[1, 2], [3, 4]]) # 将numpy数组转换为tensor tensor = torch.from_numpy(arr) print(tensor) 输出结果为: tensor([[1, 2], [3, 4]], dtype=torch.int32) ### 回答2: PyTorch在深度学习领域中表现出色,它提供了许多操作工具来处理张量,这些工具便于用户在模型中进行矩阵处理。 对于numpy.ndarray变量,可以将其转换为PyTorch中的tensor类型。将numpy.ndarray转换为tensor是一个简单而方便的过程,可以通过一行代码轻松完成。 下面是将numpy.ndarray变量转换为tensor的方法: ```Python import torch #创建一个numpy.ndarray np_array = np.array([[1,2,3],[4,5,6]]) #将numpy.ndarray转换为tensor tensor_array = torch.from_numpy(np_array) print("numpy.ndarray变量为:\n", np_array) print("tensor变量为:\n", tensor_array) ``` 这里需要导入PyTorch库,并使用`torch.from_numpy`函数将numpy数据类型转换为torch.Tensor类型。从数据输出来看,这个转换是正确的。 这个转换可以用于将numpy中读取的任意张量转换为PyTorch中的张量,以便在深度神经网络中进行使用。 总之,numpy.ndarray转换为tensor是一个简单且非常有用的过程,对于深度学习实践者来说,掌握这种转换方法是非常重要的。 大多数现代深度学习框架(包括PyTorch)都可以通过这种方式与numpy数据进行通信,因此,使用PyTorch深度学习框架时,numpy.ndarray转换为tensor将成为日常工作的众多任务之一。 ### 回答3: PyTorch是一个流行的深度学习框架,它基于Torch实现,并提供了许多更高级的API来简化神经网络的搭建和训练。PyTorch中的tensor是非常重要的概念,其对于神经网络计算非常关键。 如果在PyTorch中已经使用了一些numpy数组,并且想要将它们转换为张量,可以使用`torch.from_numpy()`方法很方便地完成。具体来说,可以将numpy array转换为张量,然后可以使用仅适用于张量的其他方法。 需要注意的是,在将numpy数组转换为张量时,张量和数组共享相同的内存位置。如果更改张量或数组中的一个对象,则也会更改另一个对象。 以下是将numpy数组转换为张量的示例代码: ``` import numpy as np import torch # 创建一个numpy数组 numpy_array = np.array([1, 2, 3]) print('numpy_array:', numpy_array) # 将numpy数组转换为张量 tensor = torch.from_numpy(numpy_array) print('tensor:', tensor) ``` 输出如下: ``` numpy_array: [1 2 3] tensor: tensor([1, 2, 3]) ``` 在这个例子中,`numpy_array`转换为PyTorch的张量`tensor`。我们可以看到,它们之间共享相同的数值。 另外,张量除了可以从numpy数组转换而来,还有很多其他的方法,例如从Python字面量、从列表、从元组、从其他张量和从CSV文件等等也可以将数据转换为张量。通常来说,不同数据类型之间的转换都非常流畅,并不需要使用一些特殊的技术和思路,而只需要利用PyTorch提供的API即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值