web-dev-qa-db-fra.com

Compositeur & Cygwin

Le compositeur ne fonctionne pas correctement dans Cygwin si vous essayez de l'installer "globalement".

Mettre composer.phar dans/usr/local/bin/composer, puis essayer de l'exécuter entraînera l'erreur:

Could not open input file: /usr/local/bin/composer
27
Populus

Je viens juste de trébucher sur le même problème et de trouver une solution. Publiez-le ici, au cas où je devrai le vérifier à nouveau.

  1. Configurez un répertoire bin juste sous /home/my-username:

    cd ~
    mkdir bin
    
  2. Déplacez le composer.phar (ou tout autre de ces astucieux nouveaux PHP imps en augmentation) Dans le répertoire ~/bin et assurez-vous de définir c'est bit d'exécution :

    # Notice how I got rid of the superfluous `.phar` extension
    mv /path/to/composer.phar ~/bin/composer
    chmod +x ~/bin/composer
    
  3. Dites à cygwin d'inclure votre répertoire ~/bin dans le chemin de recherche:

    Ouvrez le fichier ~/.bash_profile et décommentez le paragraphe suivant ...

    # Set PATH so it includes user's private bin if it exists
    if [ -d "${HOME}/bin" ] ; then
      PATH="${HOME}/bin:${PATH}"
    fi
    
  4. Maintenant, pour la partie la plus importante:

    Un script d'encapsulation qui aide le PHP natif de Win _ à résoudre les chemins de style Unix (ce qui cause le problème Après tout, car Windows ne sait pas comment gérer les chemins /cygdrive/...).

    cd ~/bin
    touch php
    chmod +x php
    

    Après avoir édité le script wrapper ~/bin/php devrait se lire:

    #!/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. Maintenant, redémarrez votre shell et il devrait appeler correctement l'interprète PHP chaque fois qu'il Tombe sur un #!/usr/bin/env php Shebang. Émettez simplement un:

    composer --help
    
60
aefxx

Celui-ci, ça va?

  1. Dans ~/.bashrc, ajoutez: alias composer='php c:\\your\\path\\to\\composer.phar'
  2. Redémarrez cygwin ou rechargez la base en exécutant source ~/.bashrc

Fonctionne pour moi en utilisant le php.exe natif de Cygwin et celui spécifique à Windows de XAMPP.

10
rkok

Je pense que ce qui pourrait fonctionner est de construire un proxy à la place:

  • Placez composer.phar dans /usr/local/bin/composer.phar
  • Créez un proxy bash en tant que/usr/local/bin/composer avec les éléments suivants:

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

7
Seldaek

J'ai eu le même problème. Après avoir lu la dernière instruction du programme d’installation de composer, il indique que la variable $ PATH doit être rechargée. J'ai redémarré mon ordinateur puis lié la corbeille Composer à /usr/local/bin.

Commencez par localiser le répertoire de composition: /cygdrive/c/ProgramData/ComposerSetup/bin/composer

Ensuite, selon Seldaek answer, après avoir essayé un lien symbolique qui ne fonctionnait pas, j'ai:

nano /usr/local/bin/composer

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

chmod +x /usr/local/bin/composer

Et ça marche.

3
soyuka

Ce que j'ai fait (très simple):

  • Installer Composer normalement avec l'installateur Windows
  • Ouvrez une console Cygwin de type composer, vous verrez quelque chose comme Could not open input file: /c/route/to/your/composer/installation/bin
  • Créez un alias composer='composer.bat' sur votre profil bash ou bashrc ou autre chose
  • Terminé

J'utilise Windows 8.1

3
nikoskip

Essaye ça:

  • Installez Cygwin PHP et utilisez-le pour exécuter composer dans Cygwin.

Vous pouvez choisir l'une des deux façons de bien fonctionner avec PHP + Composer dans Cygwin:

  1. Installez Cygwin PHP et installez composer.phar dans Cygwin.

  2. Installez Windows PHP et installez Winodows Composer, puis appelez ensuite depuis Cygwin. (Windows XAMMP + Composer avec un alias dans cmd)


Votre problème est dû au fait que Cygwin Composer est en train de ruiner Windows PHP sur Cygwin, de sorte qu'il ne peut pas reconnaître le chemin du fichier. 

Après l’installation de Cygwin PHP, le compositeur s’intégrera avec Cygwin PHP puis s’adaptera au chemin de fichiers de Cygwin.

Cygwin PHP extensions pour l'utilisation du compositeur:

php
php-json
php-mbstring
php-phar 
php-Zip
php-posix

Vous pouvez installer une autre extension PHP lorsque le package du compositeur est nécessaire, tel que php-xmlwriter, php-tokenizer, php-ctype.


Guide des commandes d'installation:

Si vous avez déjà installé apt-cyg , il existe une commande d'installation ci-dessus:

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

Puis installez Composer via Cygwin PHP:

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

Conclusion

Je recommande d'utiliser Windows PHP + Windows Composer, puis de l'appeler dans Cygwin, car Cygwin PHP n'est pas très stable par rapport à Windows PHP.

2
Nick Tsai

J'avais ce problème. La plupart des réponses étaient sur ma tête, mais je l'ai corrigé sans problème.

Étape 1) Réinstallez Composer de manière globale conformément à https://getcomposer.org/download/

Étape 2) Laissez-le tranquille. Tout ce que tu veux faire de spécial, ne le fais pas.

Étape 3) Téléchargez le dernier fichier setup-xxx.exe à partir de https://cygwin.com/

Étape 4) Cliquez dessus avec votre souris.

REMARQUE: au cours de l'étape 5, vous ressentirez un besoin soudain de lire les instructions, de naviguer sur le Web et de commencer à vérifier les petites cases du menu. Ne fais pas ça.

Étape 5) Cliquez sur 'Suivant' jusqu'à ce que vous ne demandiez plus. Il examinera vos paramètres Existants, apportera des corrections et ajoutera les dépendances manquantes. 

Cela a fonctionné pour moi.

1
Gregor Macgregor

Faire en sorte que le compositeur travaille dans Cygwin dans le monde entier est pénible ...

Les solutions que j'ai proposées:

  1. Ne l'utilisez pas globalement. Si vous utilisez la CLI PHP à partir d'une installation Windows, elle ne reconnaîtra pas les chemins Linux utilisés par Cygwin.

    Ce que j'ai fait est de le mettre dans le répertoire de base de tous les projets pour lesquels j'utilise composeur et de le faire ../composer.phar pour l'exécuter.

    Cela fonctionne bien de cette façon, et il est presque globalement disponible ...

  2. Téléchargez et compilez vos propres fichiers binaires PHP au sein de Cygwin ... Oui, en quelque sorte une surcharge.

1
Populus

Le moyen le plus simple consiste à installer composer à l'aide du programme d'installation Windows à partir de leur site Web, puis à copier les deux fichiers "composer" et "composer.phar" de "C:\ProgramData\Composer" dans un répertoire se trouvant dans la variable PATH. Par exemple. vous pouvez copier les fichiers dans le répertoire/bin/de cygwin. Ensuite, vous pouvez à nouveau désinstaller la "version Windows" de composer.

Mise à jour! C'est ce que j'ai fait:

  1. Installez PHP et les modules nécessaires à partir du projet Cygwin Ports
  2. Téléchargez le dernier instantané du compositeur
  3. Renommez 'composer.phar' en 'composeur' et enregistrez-le dans/usr/local/bin
  4. Ouvrez /bin/dash.exe et exécutez '/ usr/bin/rebaseall'
  5. De plus, si 4. vous donne une erreur, composeur doit maintenant s'exécuter
0
Thasmo

Je vous suggère d'utiliser babun, il est basé sur cygwin, mais vous pouvez installer paquet par pacte, vous pouvez le faire:

pact installer php php-json php-phar

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

alors amusez-vous.

0
avatas

Je l'ai corrigé en ajoutant un fichier /usr/local/bin/composer:

nano /usr/local/bin/composer

avec le contenu suivant:

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

Fondamentalement, vous devez appeler PHP avec un chemin de style Windows, pas un chemin de cygwin.

0
Matthieu Napoli

J'avais du mal à faire travailler Composer dans Cygwin et aucune des solutions ci-dessus ne résout mon problème. Finalement, je suis tombé sur ce commentaire dans la discussion sur les bugs de Composer github:

Ouais TBH utiliser php depuis cygwin n'est pas une bonne idée, cygwin est un environnement trop différent. Trop de piratages qui créent des échecs. En tout cas, fermer ici car il n'y a pas grand-chose à faire, j'ai bien peur :)

Je ne sais pas précisément où compositeur/Cygwin/php se mettait en marche, mais, grosso modo, mon problème était que j'avais deux installations en conflit de PHP dans les variables d'environnement, l'une provenant d'une installation de WAMP et l'autre installé avec Cygwin. L’installation de Cygwin PHP semblait se heurter à un problème de chemin d’accès. Je l'ai enlevé, en n'utilisant que le PHP WAMP, et composer a fonctionné parfaitement dans Cygwin.

0
wmf123

J'ai résolu le problème comme ceci dans une configuration Cygwin/XAMPP:

  • Installez composer.phar dans le répertoire php de XAMPP

  • Créez un script Bash exécutable nommé composer dans le répertoire php de XAMPP:

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

    Il est important d'utiliser cygpath -w pour convertir le chemin en un chemin sous forme Windows.

  • Assurez-vous que le répertoire php de XAMPP est accessible dans le $PATH de Cygwin:

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


Il est maintenant possible d’appeler composer de n’importe où et sans problème:

    $ composer -V
    Composer version 264f433ca3f007d39568b3722b4bf418f58ba15b
0
Oliver