“ppm.bat安装失败:找不到任何提供MinGW的软件包”

时间:2012-05-11 05:38:43

标签: perl

我正在尝试在Windows 7中安装缺少的Perl模块(Palm::PDB)。

我尝试了以下内容:

  1. 使用Perl Package Manager:遗憾的是它似乎找不到我想要的模块。

  2. 使用命令提示符在Windows中启动CPAN shell:不幸的是,它显示以下错误。我已经安装了MinGW并且还设置了路径。

    D:\Scripts>perl -MCPAN -e 'shell' install Palm::PDB
    
    It looks like you don't have a C compiler and make utility installed.  Trying
    to install dmake and the MinGW gcc compiler using the Perl Package Manager.
    This may take a few minutes...
    
    ppm.bat install failed: Can't find any package that provides MinGW
    
    It looks like the installation of dmake and MinGW has failed.  You will not be
    able to run Makefile commands or compile C extension code.  Please check your
    internet connection and your proxy settings!
    
  3. 有没有其他简单的方法在Windows上安装Perl模块?

7 个答案:

答案 0 :(得分:4)

您的ActiveState Perl安装有问题,因为它会自动为您安装dmake和MinGW。

如果安装了dmake.exe,请尝试通过运行以下命令安装MinGW:

ppm install MinGW
perl Makefile.PL
dmake
dmake test
dmake install

MinGW和dmake也被安装到C:\ Perl \ site \ bin中。确保此目录位于PATH上(默认情况下由ActivePerl安装程序完成)。

答案 1 :(得分:3)

在Windows上使用Perl的一种简单方法是使用最新版本的StrawberryPerl。它捆绑了dmake和C编译器(gcc)。 cpan命令只是开箱即用。

答案 2 :(得分:1)

cpan尝试找到一个C编译器 - 可能这个模块或某些依赖项具有本机代码(对于数据库驱动程序更为常见)。 MingW是Windows的gcc端口。

如果不起作用,请尝试使用linux安装虚拟机并安装gcc:)

答案 3 :(得分:1)

ActiveState会审核他们为PPM发布的所有模块。因此,它通常没有不需要的模块,或者最近发布的模块。

在Windows上使用它的最快方法是安装Strawberry Perl因为开箱即用,它附带了一个可以与CPAN一起使用的C编译器。这将使您免于配置MingW的所有麻烦。

答案 4 :(得分:1)

对我来说,它从此位置C:\ Users \%YOUR_USERNAME%\ AppData \ Local \ ActiveState \ ActivePerl \

C:\WINDOWS\system32>ppm install MinGW

下载ActiveState软件包系统信息库dbimage ...完成 下载MinGW-4.6.3 ...完成 正在下载dmake-4.11.20080107 ...完成 打开MinGW-4.6.3的包装...完成 开箱dmake-4.11.20080107 ...完成 为MinGW-4.6.3生成HTML ...完成 为dmake-4.11.20080107生成HTML ...完成 正在更新站点区域中的文件...已完成 已安装3697个文件

谢谢@Void

答案 5 :(得分:0)

perl -MCPAN -e shell

  

安装SOAP :: Lite

如果有人在Windows 10上遇到同样的问题,请在Windows命令行上使用上述命令。它对我有用。

答案 6 :(得分:0)

我解决了,我清理了ActivePerl的AppData文件夹。

  

C:\用户\%YOUR_USERNAME%\应用程序数据\本地\的ActiveState \的ActivePerl \

删除该文件夹中的所有数据。然后再次重新运行import { Component,ElementRef, OnInit } from '@angular/core'; import { Http, Headers, RequestOptions } from '@angular/http'; import 'rxjs/add/operator/map'; import "rxjs/add/operator/do"; export class HomeComponent implements OnInit { constructor(private http: Http,private el: ElementRef) { } upload() { let inputEl: HTMLInputElement = this.el.nativeElement.querySelector('#photo'); let fileCount: number = inputEl.files.length; let formData = new FormData(); if (fileCount > 0) { // a file was selected for (let i = 0; i < fileCount; i++) { formData.append('file', inputEl.files.item(i)); } let headers = new Headers(); headers.append('Accept', 'application/json'); const token = localStorage.getItem('token') ? '?token=' + localStorage.getItem('token') : ''; this.http.post('http://localhost:3000/stretch/1' + token, formData, { headers: headers }).map(res => res.json()) .catch(error => Observable.throw(error)) .subscribe( data => console.log(data), error => console.log(error) ); } } } // html code <input id="photo" type="file" /> <button type="button" class="btn btn-success btn-s" (click)="upload()">Upload</button> my node code var multer = require('multer'); //FOR FILE UPLOAD var storage = multer.diskStorage({ //multers disk storage settings destination: function (req, file, cb) { cb(null, './public/uploads'); //image storage path }, filename: function (req, file, cb) { var datetimestamp = Date.now(); cb(null, file.originalname); } }); var upload = multer({ //multer settings storage: storage }).single('file'); router.post('/1', upload, function (req, res, next) { var decoded = jwt.decode(req.query.token); var path = ''; User.findById(decoded.user._id, function (err, user) { if (err) { return res.status(500).json({ title: 'An error occurred', error: err, }); } if (req.file){ upload(req, res, function (err) { if (err) { // An error occurred when uploading return res.status(422).send("an Error occured"); } // No error occured. path = req.file.path; return res.status(200).send(path); }); } }); }); !它奏效了。