29

如果您尝试“全局”安装 Composer,它将无法在 Cygwin 中正确运行。

将composer.phar放入/usr/local/bin/composer,然后尝试运行会报错:

Could not open input file: /usr/local/bin/composer
4

13 回答 13

64

刚刚遇到同样的问题并找到了解决方案。把它贴在这里,以防万一我不得不再次查找它。

  1. 在下面设置一个bin目录/home/my-username

    cd ~
    mkdir bin
    
  2. composer.phar(或任何其他正在兴起的漂亮的新 PHP 小鬼)移动到~/bin目录中,并确保设置它的执行位

    # Notice how I got rid of the superfluous `.phar` extension
    mv /path/to/composer.phar ~/bin/composer
    chmod +x ~/bin/composer
    
  3. 告诉在搜索路径cygwin中包含您的目录:~/bin

    打开文件~/.bash_profile并取消注释以下段落...

    # Set PATH so it includes user's private bin if it exists
    if [ -d "${HOME}/bin" ] ; then
      PATH="${HOME}/bin:${PATH}"
    fi
    
  4. 现在,对于最重要的部分:

    一个帮助 Win 的原生 PHP 解析 Unix 样式路径的包装脚本(这毕竟是导致问题的原因,因为 Windows 不知道如何处理/cygdrive/...路径)。

    cd ~/bin
    touch php
    chmod +x php
    

    编辑包装脚本后~/bin/php应为:

    #!/bin/bash
    
    # e.g. php="/cygdrive/c/Program Files (x86)/php/php.exe"
    php="/path/to/php.exe"
    
    for ((n=1; n <= $#; n++)); do
        if [ -e "${!n}" ]; then
            # Converts Unix style paths to Windows equivalents
            path="$(cygpath --mixed ${!n} | xargs)"
    
            case 1 in
                $(( n == 1 )) )
                    set -- "$path" "${@:$(($n+1))}";;
                $(( n < $# )) )
                    set -- "${@:1:$((n-1))}" "$path" ${@:$((n+1)):$#};;
                *)
                    set -- "${@:1:$(($#-1))}" "$path";;
            esac
        fi
    done
    
    "$php" "$@"
    
  5. 现在重新启动你的 shell,它应该在遇到#!/usr/bin/env phpshebang 时正确调用 PHP 解释器。只需发出:

    composer --help
    
于 2013-02-15T22:42:35.240 回答
14

这个怎么样?

  1. 在 ~/.bashrc 中,添加:alias composer='php c:\\your\\path\\to\\composer.phar'
  2. 通过运行重新启动 cygwin 或重新加载 bashrcsource ~/.bashrc

使用 Cygwin 的本机 php.exe 和 XAMPP 的 Windows 特定的一个对我有用。

于 2015-02-15T13:03:57.230 回答
7

我认为可能可行的是构建代理:

  • 将 composer.phar 放在 /usr/local/bin/composer.phar
  • 使用以下内容创建一个 bash 代理作为 /usr/local/bin/composer:

    #!/bin/sh
    c:/path/to/php c:/path/to/composer.phar $@
    
  • chmod +x /usr/local/bin/composer

于 2012-09-05T08:39:34.063 回答
5

试试这个:

  • 安装 Cygwin PHP 并使用它在 Cygwin 中运行 composer。

您可以选择以下两种方式之一在 Cygwin 中正常使用 PHP+Composer:

  1. 安装 Cygwin PHP 并在 Cygwin 中安装 composer.phar。

  2. 安装 Windows PHP 并安装 Winodows Composer,然后从 Cygwin 调用。(在 cmd 中有别名的 Windows XAMMP+Composer)


您的问题是由于 Cygwin Composer 被 Cygwin 上的 Windows PHP 破坏造成的,因此它无法识别文件路径。

安装 Cygwin PHP 后,composer 将与 Cygwin PHP 集成,然后适应 Cygwin 的文件路径。

用于作曲家的 Cygwin PHP 扩展:

php
php-json
php-mbstring
php-phar 
php-zip
php-posix

当需要 composer 的包时,您可以安装其他 PHP 扩展,例如php-xmlwriter, php-tokenizer, php-ctype.


安装命令指南:

如果你已经安装了apt-cyg,上面有安装命令:

apt-cyg install php php-json php-mbstring php-phar php-zip php-posix
apt-cyg install php-xmlwriter php-tokenizer php-ctype

然后通过 Cygwin PHP 安装 Composer:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
chmod +x ./composer.phar
mv ./composer.phar /usr/bin/composer
composer -v

结论

我推荐使用 Windows PHP + Windows Composer,然后在 Cygwin 中调用,因为 Cygwin PHP 并不比 Windows PHP 稳定。

于 2017-06-21T02:04:33.573 回答
4

我有同样的问题。从作曲家安装程序阅读最后的指令后,它说应该重新加载 $PATH 变量。我重新启动计算机,然后将 Composer bin 链接到/usr/local/bin.

首先找到作曲家 bin : /cygdrive/c/ProgramData/ComposerSetup/bin/composer

然后根据Seldaek的回答,在尝试了一个无效的符号链接后,我做了:

nano /usr/local/bin/composer

#!/bin/sh
/cygdrive/c/ProgramData/ComposerSetup/bin/composer $@

chmod +x /usr/local/bin/composer

它正在工作。

于 2014-02-19T10:54:40.543 回答
3

我做了什么(非常简单):

  • 使用 Windows 安装程序正常安装 Composer
  • 打开 Cygwin 控制台,composer您将看到类似的类型Could not open input file: /c/route/to/your/composer/installation/bin
  • composer='composer.bat'在您的 bash 配置文件或 bashrc 或其他任何内容上创建别名
  • 完毕

我正在运行 Windows 8.1

于 2014-01-13T19:45:10.087 回答
2

我遇到了这个问题。大多数回复都在我的脑海中,但我没有问题地修复它。

步骤 1) 按照https://getcomposer.org/download/在全球范围内重新安装 Composer

第 2 步)不要管它。所有你想做的特别的事情,不要那样做。

步骤 3) 从https://cygwin.com/下载最新的 setup-xxx.exe

步骤 4) 用鼠标单击它。

注意:在第 5 步中,您会突然有阅读说明、浏览网页以获取信息并开始检查菜单上的小框的冲动。不要那样做。

步骤 5) 单击“下一步”,直到它停止询问。它将查看您现有的设置,修复并添加任何缺少的依赖项。

这对我有用。

于 2015-12-23T16:30:41.727 回答
0

让作曲家在 Cygwin 内部全球工作是一件很痛苦的事……

我提出的解决方案:

  1. 不要在全球范围内使用它。如果您从 Windows 安装中使用 PHP CLI,它将无法识别 Cygwin 使用的 Linux 路径。

    我所做的是将它放在我使用 composer 的所有项目的基本目录中,然后执行 ../composer.phar 来运行它。

    它以这种方式运行良好,并且几乎在全球范围内可用......

  2. 在 Cygwin 中下载并编译您自己的 PHP 二进制文件……是的,有点矫枉过正。

于 2012-09-05T07:57:54.363 回答
0

最简单的方法是使用他们网站上的 Windows 安装程序安装 composer,然后将“C:\ProgramData\Composer”中的“composer”和“composer.phar”两个文件复制到 PATH 变量中的目录中。例如,您可以将文件复制到 cygwin 的 /bin/ 目录中。之后,您可以再次卸载 Composer 的“Windows 版本”。

更新!这就是我所做的:

  1. Cygwin Ports 项目安装 PHP 和所需模块
  2. 下载最新的作曲家快照
  3. 将 'composer.phar' 重命名为 'composer' 并保存到 /usr/local/bin
  4. 打开 /bin/dash.exe 并运行“/usr/bin/rebaseall”
  5. 此外,如果 4. 给你一个错误,composer 应该现在运行
于 2013-03-03T14:29:14.997 回答
0

我在 Cygwin/XAMPP 设置中解决了这样的问题:

  • 安装composer.phar到 XAMPP 的php目录

  • 创建一个名为composerXAMPPphp目录的可执行 Bash 脚本:

    #!/bin/bash
    script_dir=$(cygpath -w $(dirname $0))
    php "$script_dir/composer.phar" $@
    

    cygpath -w用于将路径转换为 ​​Windows 形式的路径很重要。

  • php确保在 Cygwin 中可以访问XAMPP 的目录$PATH

    $ export PATH=$PATH:/cygdrive/i/dev/server/xampp/php
    


现在可以composer从您喜欢的任何地方毫无问题地拨打电话:

    $ composer -V
    Composer version 264f433ca3f007d39568b3722b4bf418f58ba15b
于 2013-05-10T13:35:16.253 回答
0

/usr/local/bin/composer我通过添加一个文件来修复它:

nano /usr/local/bin/composer

内容如下:

#!/bin/bash
/cygdrive/c/wamp/bin/php/php5.4.3/php "C:\wamp\bin\php\php5.4.3\composer"

基本上,您必须使用 Windows 样式路径而不是 cygwin 路径调用 PHP。

于 2013-05-17T09:58:24.320 回答
0

我建议你使用 babun,它基于 cygwin,但是你可以通过 pact 安装包,你可以这样做:

契约安装 php php-json php-phar

php -r "readfile(' https://getcomposer.org/installer ');" | php

然后享受自己。

于 2015-07-22T08:22:15.890 回答
0

我无法让 Composer 在 Cygwin 中工作,并且上述解决方案都没有解决我的问题。最终,我在 Composer github bugs 讨论中偶然发现了这条评论:

是的,使用 cygwin 的 php 的 TBH 不是一个好主意,cygwin 的环境太不同了。太多导致失败的黑客行为..无论如何,在这里关闭,因为我们无能为力我害怕:)

我不确切知道composer/Cygwin/php在哪里出错,但总的来说,我的问题是我在环境变量中有两个冲突的PHP安装,一个来自WAMP的安装,另一个来自Cygwin。Cygwin PHP 安装似乎遇到了某种路径问题。我删除了它,只使用 WAMP PHP,作曲家在 Cygwin 中运行得很好。

于 2017-01-23T17:31:11.753 回答