Composer & Cygwin

30

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

将composer.phar放入/usr/local/bin/composer,然后尝试运行它将导致错误:

Could not open input file: /usr/local/bin/composer
13个回答

65

我刚遇到同样的问题并找到了解决方法。为了以防将来需要再次查看,我在此发布它。

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

cd ~
mkdir bin
  • 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
    
  • 告诉 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
    
    现在,最重要的部分:
    一个包装脚本可以帮助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" "$@"
    
  • 现在重新启动你的shell,这样每当它遇到 #!/usr/bin/env php 带有shebang的语句时,就会正确地调用PHP解释器。只需执行以下命令:

  • composer --help
    

    1
    认真地。你能在网上找到我(只需谷歌PHP专家),给我发送你的Dwolla / Paypal地址,因为我真的想感谢你写出这么棒的PHP cygwin包装脚本。 - Theodore R. Smith
    2
    @TheodoreR.Smith 非常感谢您的好意,但请不要寄送任何款项。对于您有用,这已经足够了。 - aefxx
    3
    我为composer修复了问题,无需使用通用的包装脚本,只需使用一个简单的别名 alias composer='php "$(cygpath -w ~/bin/composer.phar)"'(当然,需要确保PATH中有php)。 - dregad
    因为评论和点赞的原因,我接受了答案。我不再使用 Windows 进行开发,所以无法进行个人验证... - Populus
    2
    只是一个快速的评论,你不需要关闭 shell,只需执行 . ~/.bashrcsource ~/.bashrc 重新加载文件即可。第二个注意事项,这在 MobaXterm 上也非常出色(它在本地会话中运行 gygwin)。 - DarkMukke
    显示剩余5条评论

    14

    这个怎么样?

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

    对我来说,无论是Cygwin的本地php.exe还是XAMPP的Windows专用版本都可以使用。


    1
    好的,干净简单易懂的解决方案! - Roy
    这个对我来说更好,使用zsh包装在conemu中。现在颜色显示正常。谢谢! - Iliyan Trifonov

    7

    我认为可以构建一个代理来解决问题:

    • Put composer.phar in /usr/local/bin/composer.phar
    • Create a bash proxy as /usr/local/bin/composer with the following:

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


    5

    尝试这样做:

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

    有两种方式可以在Cygwin中良好地使用PHP+Composer:

    1. 安装Cygwin PHP并在其中安装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扩展程序以供composer使用:

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

    当需要使用composer包时,您可以安装其他PHP扩展,例如php-xmlwriterphp-tokenizerphp-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稳定。


    4
    我遇到了同样的问题。在阅读composer安装器的最终指示后,它说$PATH变量应该被重新加载。我重新启动了我的计算机,然后将Composer bin链接到/usr/local/bin
    首先定位Composer 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

    现在它可以正常工作了。


    这对我来说似乎很好用。我用“which php $@”替换了完整路径,因为我在环境中设置了PHP。 - tftd
    非常感谢,这对我来说是解决方案! - Luis Alfredo Serrano Díaz

    3

    我的操作步骤(非常简单):

    • 使用 Windows 安装程序正常安装 Composer
    • 打开 Cygwin 控制台并输入 composer,您将看到类似于 Could not open input file: /c/route/to/your/composer/installation/bin 的信息
    • 在您的 bash 配置文件(如 bash profile 或 bashrc 等)中创建别名 composer='composer.bat'
    • 完成

    我使用的是 Windows 8.1 操作系统


    适用于我并且看起来是较不痛苦的方式。 - Basster
    如果您能详细说明如何创建别名,那将非常有帮助。 - Tim Hallman

    2
    我遇到了这个问题,大多数回复都超出了我的理解范围,但我成功地解决了它。
    步骤1)按照https://getcomposer.org/download/重新全局安装Composer。
    步骤2)不要去做那些特殊的事情。
    步骤3)从https://cygwin.com/下载最新的setup-xxx.exe。
    步骤4)用鼠标单击它。
    注意:在第5步期间,您会突然想阅读说明、浏览网络以获取信息并开始在菜单上勾选小框。不要这样做。
    步骤5)一直点击“下一步”,直到它停止询问。它会查看您现有的设置,修复问题并添加任何缺少的依赖项。
    这对我有效。

    0
    我建议您使用Babun,它基于Cygwin,但您可以通过Pact安装软件包,您可以执行以下操作: pact install php php-json php-phar php -r“readfile('https://getcomposer.org/installer');”| php 然后尽情享受吧。

    0

    我在Cygwin中使用Composer时遇到了问题,上面的解决方案都没有解决我的问题。最终我在Composer的github错误讨论中偶然发现了this comment

    是的,说实话,在Cygwin中使用php并不是一个好主意,因为Cygwin的环境与其他环境有太多的差异。有太多的hack会导致失败...无论如何,由于我们无法做太多事情,所以在这里关闭 :)

    我不知道composer/Cygwin/php具体出了什么问题,但总的来说,我的问题是由于我在环境变量中安装了两个冲突的PHP版本,一个是WAMP的安装,另一个是Cygwin安装的。Cygwin PHP似乎在某种路径问题上遇到了困难。我删除了它,只使用了WAMP PHP,然后在Cygwin中运行composer就可以正常工作了。


    0

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

    更新!这是我所做的:

    1. Cygwin Ports项目安装PHP和所需模块
    2. 下载最新的composer快照
    3. 将'composer.phar'重命名为'composer'并保存到/usr/local/bin
    4. 打开/bin/dash.exe并运行'/usr/bin/rebaseall'
    5. 如果第4步出现错误,则现在应该可以运行composer了

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接