php - mac - Problemas con la dependencia de lib-icu al instalar Symfony 2.3.x a través de Composer
instalar symfony con composer (6)
No he tenido problemas para instalar Symfony 2.2.x usando Composer, siempre he copiado la versión estable en http://symfony.com/download .
composer create-project symfony/framework-standard-edition myproject/ 2.2.1
(Tengo Composer instalado globalmente)
Curioso acerca de 2.3.0-RC1, pensé que esto funcionaría sin problemas:
composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.0-RC1
Pero se apagó por los siguientes errores:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- symfony/icu v1.2.0-RC1 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- symfony/icu v1.1.0-RC1 requires lib-icu >=3.8 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- symfony/symfony v2.3.0-RC1 requires symfony/icu >=1.0,<2.0 -> satisfiable by symfony/icu[v1.1.0-RC1, v1.2.0-RC1].
- Installation request for symfony/symfony 2.3.* -> satisfiable by symfony/symfony[v2.3.0-RC1].
¿Debo modificar el archivo composer.json?
Actualización de la solución
Me faltaba la extensión php intl que proporciona lib-icu
Tan fácil, instalar y configurar la extensión intl. A partir de PHP 5.3, la extensión Intl se distribuye de manera predeterminada, pero algunas distribuciones, como MAMP, no tienen Intl, por lo que deberá adquirirla. Utilicé PEAR :
Mis pasos:
- Instale la extensión Intl (mantenida por PECL):
$ pear install pecl/intl
- puede que tenga que agregar primero el canal pecl a pear. - Si usa MAMP y nunca ha trabajado con pear / pecl, consulte la útil publicación de blog de lullabot ; MAMP no incluye la fuente de php, por lo que debe descargar la fuente de su versión de php y mover la fuente a
/Applications/MAMP/bin/php/php[version]/include/php
(como se detalla en la publicación del blog) ) - PEAR no pudo encontrar mi php.ini, así que tuve que agregar manualmente
extension=intl.so
a php.ini. En MAMP puedes editar php.ini fácilmente yendo a Archivo> Editar plantilla> php. [Versión] .ini
Línea de comando:
- Al usar Composer o Symfony''s Console CLI, también necesitará Intl y dado que la CLI de
php
usualmente usa unphp.ini
diferente, también querrá agregar la directiva de extensión. Para encontrar el php.ini de su CLI simplemente haga$ php -i |grep php/.ini
para descubrir la ruta del archivo y agregueextension=intl.so
a ese php.ini también. - Para verificar si Intl está instalado, puede hacer
$ php -m
para verificar los módulos disponibles.
¡ Actualice su extensión php-intl , de ahí viene el error icu!
sudo aptitude install php5-intl // i.e. ubuntu
brew install icu4c // osx
compruebe que la extensión esté habilitada y configurada correctamente en php.ini también.
(sugerencia: php-cli a veces usa un php.ini diferente)
php.ini
extension=intl.so ; *nix
extension=php_intl.dll ; windows
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
compruebe su phpinfo()
Y php -m
desde su terminal si la extensión se ha habilitado con éxito.
Verifique sus versiones actuales de php con:
Intl::getIcuVersion();
Intl::getIcuDataVersion();
atención: ya no es necesario ( symfony 2.3 ha sido liberado )
agregue la bandera de estabilidad mínima @dev o @rc a su dependencia de esta manera por favor:
composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.*@dev
La estabilidad predeterminada en el compositor es estable y la rama de Symfony 2.3 no está actualmente (es @rc). Lea más sobre los indicadores de estabilidad here .
Aquí puede encontrar una solución sobre este problema o problemas similares: ICU y Problemas de Despliegue
El comportamiento del compositor debe ser inteligente seleccionando el componente icu correcto:
- symfony / icu 1.0. *: cuando la extensión intl no está disponible
- symfony / icu 1.1. *: cuando intl se compila con ICU 4.0 o superior
- symfony / icu 1.2. *: cuando intl se compila con ICU 4.4 o superior
Debería haber (teóricamente) ningún error al instalar Symfony 2.3. sin intl-extension
Pero puede quedar atrapado cuando su entorno de desarrollo difiere de su servidor de producción como se menciona en este artículo:
- las máquinas de desarrollo se compilan con la UCI 4.4 o superior, pero el servidor está compilado> con una versión de UCI inferior a la 4.4
- la extensión intl está disponible en las máquinas de desarrollo pero no en el servidor.
Cuando no tiene acceso de root a su servidor de producción, puede arreglarlo como se menciona en este artículo. (retocando composer.json)
Espero que esta información adicional ayude, ya que me ayudó en este caso especial con diferentes entornos.
Mac OS Mavericks viene con PHP 5.4.17 sin intl. Para obtener esto, tendrás que seguir esos pasos:
brew install icu4c
sudo pecl install intl
The path to the ICU libraries and headers is: /usr/local/opt/icu4c/
Edit /etc/php.ini and add extension=intl.so to the end.
Muchas aplicaciones solo admitirán la configuración regional "en" y no tendrán necesidad de capacidades de traducción o php-intl. Si es usted o no puede instalar php-intl en su servidor, puede agregar explícitamente symfony/icu ~ 1.0 a su composer.json
. 1.0 no requiere php-intl, mientras que 1.1+ lo hace.
Si no necesita funciones de traducción:
$ php bin/composer.phar require symfony/icu ~1.0
Sin esta declaración e intentando instalar Symfony / Symfony 2.3, Composer puede intentar instalar Symfony / icu ~ 1.2, lo que requeriría la instalación de php-intl.
Esto se cubre explícitamente más extensamente en los documentos del componente Symfony Intl en "ICU and Deployment Problems".
Sé que esta respuesta puede no ser la correcta para el problema de esta persona, pero fue la solución a mi problema con el mismo título. Pude solucionar este problema al habilitar la extensión intl en php.ini y actualizar el compositor.
Actualizando el compositor.
php composer.phar self-update
Eliminar el comentario de esta línea (en php.ini):
extension=php_intl.dll
Y también elimine el comentario de estas dos líneas debajo de [intl] en (php.ini):
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
Y reinicie apache2, por supuesto. :)
Información Adicional:
Si usa mac y php instalado con Homebrew, siga estos pasos:
(PHP 5.4)
$ brew install php54-intl
(PHP 5.5)
$ brew tap josegonzalez/php
$ brew tap homebrew/dupes
$ brew install josegonzalez/php/php55-intl
$ sudo apachectl restart
Reinicie Apache.
Una mejor solución es arreglar su composer.json a la versión requerida por el servidor de producción. Primero, determine la versión de la ICU en el servidor: 1 2
$ php -i | grep ICU
ICU version => 4.2.1
Luego, arregle el componente Icu en su archivo composer.json en una versión coincidente:
"require: {
"symfony/icu": "1.1.*"
}
Establezca la versión en "1.0. " Si el servidor no tiene la extensión intl instalada; "1.1. " Si el servidor está compilado con ICU 4.2 o inferior.
Finalmente, ejecuta
php composer.phar update symfony/icu
en su máquina de desarrollo, realice pruebas exhaustivas y vuelva a implementar. La instalación de las dependencias ahora tendrá éxito.