WedX - журнал о программировании и компьютерных науках

Как установить пакеты Composer PHP без Composer?

Я пытаюсь установить Coinbase PHP API, но для этого требуется Composer:

https://github.com/coinbase/coinbase-php

Я ищу универсальное PHP-решение (возможно, функцию), позволяющее мне устанавливать пакеты композитора непосредственно на мой сервер без использования Composer.

Я думаю, что разработчики Composer верят, что они помогают людям, но на самом деле есть тысячи начинающих разработчиков, которые не могут изучать веб-разработку из-за «барьера Composer».

Было бы действительно полезно, если бы было гибкое решение или какой-то подход, по которому мы могли бы установить без Composer? Как я могу это сделать?

Пожалуйста, не отвечайте саркастическим комментарием. Есть люди, которые не хотят использовать Composer, и я не понимаю, почему мы должны использовать какое-то стороннее программное обеспечение, чтобы заниматься веб-разработкой.

11.11.2016

  • Все пакеты, использующие composer, по-прежнему являются просто каталогами, заполненными файлами PHP. Вы можете установить их точно так же, как и до того, как появился composer: скопируйте их куда-нибудь и include файлы. 11.11.2016
  • Установка на основе Composer подразумевает выполнение одной команды, которая почти всегда отображается на домашней странице пакета. Я понимаю, что есть варианты использования ручной установки, но это никогда не будет более простым методом. 11.11.2016
  • @ ÁlvaroGonzález Я не мог не согласиться с вашим комментарием. См.: okmaya.com/2016/03/13/ менеджеры пакетов-ненависть-npm-composer. Я не говорю, что менеджеры пакетов не подходят для некоторых людей и проектов - просто они часто требуют больше работы и усилий, чем просто удаление папки в вашем проекте и обращение к ней. 08.06.2017
  • @dallin Несмотря на название, эта статья в основном является разглагольствованием о современных чрезмерно сложных фреймворках и цепочках инструментов (проблема сама по себе). Если вы хотите установить библиотеку, которая имеет 30 зависимостей, отказ от Composer в пользу 30 ручных установок может заставить вас почувствовать себя более мужественным или что-то еще, но я бы не назвал это проще, тем более для начинающих разработчиков. 08.06.2017
  • @ ÁlvaroGonzález Если честно, мне не приходилось устанавливать библиотеку с 30 зависимостями (звучит плохо спроектированный tbh). Я уверен, что без менеджера пакетов это был бы кошмар. Хотя мой опыт похож на ту статью. Обычно я пытаюсь установить что-то с одной или двумя зависимостями, и в конечном итоге мне приходится тратить свое время на устранение проблем с диспетчером пакетов, прежде чем я даже начну кодировать. Сообщения об ошибках слишком часты, невероятно расплывчаты и эзотеричны. Это могло бы лучше проиллюстрировать мои чувства: imgur.com/r/webdev/bO7oTf6. Мой опыт работы с PM был аналогичным. 08.06.2017

Ответы:


1

В composer.json файле перечислены зависимости. В вашем примере:

"require": {
    "php": ">=5.5.0",
    "guzzlehttp/guzzle": "^6.0",
    "psr/http-message": "^1.0",
    "psr/log": "^1.0"
},

Затем вы должны найти соответствующие пакеты на сайте packagist. Повторите тот же процесс для каждой зависимости: найдите дополнительные зависимости в соответствующих composer.json файлах и выполните поиск снова.

Когда, наконец, у вас будет полный список необходимых пакетов, вам нужно будет установить их все один за другим. По большей части, это просто вопрос размещения файлов где-нибудь в каталоге вашего проекта. Но вы также должны убедиться, что PHP может найти необходимые классы. Поскольку вы не используете автозагрузчик Composer, вам необходимо добавить их в свой собственный автозагрузчик. Вы можете получить информацию из соответствующих файлов composer.json, например:

"autoload": {
    "psr-4": { "Coinbase\\Wallet\\": "src/" }
},

Если вы не используете автозагрузчик классов, вам нужно выяснить отдельные операторы require_once. Вероятно, вам понадобится много проб и ошибок, потому что большинство авторов библиотек не заботятся об этом.

Также, на всякий случай, в этом есть путаница:

  • Composer имеет официальный установщик с графическим интерфейсом для Windows и процедуру установки из командной строки копировать и вставлять для всех платформ.
  • Composer можно запускать локально, а его вывод просто выгружать в другое место. Вам не нужен SSH на вашем виртуальном хостинге.
  • Команду, необходимую для установки библиотеки, можно скопировать и вставить с веб-сайта пакета - даже если сопровождающий пакета не позаботился о ее документировании, packagist.org генерирует ее по умолчанию.

Composer не идеален и подходит не для всех случаев использования, но, когда дело доходит до установки библиотеки, которая полагается на него, это, несомненно, лучшая альтернатива и довольно приличная.


Я проверил другие ответы, которые пришли после моего. В основном они делятся на две категории:

  1. Установите библиотеку и напишите с ней собственный сценарий загрузки
  2. Используйте онлайн-интерфейс для Composer

Если я чего-то не упускаю, ни один из них не рассматривает жалобы, выраженные OP:

  • Кривая обучения
  • Использование стороннего программного обеспечения
  • Возможность развиваться прямо на сервере (полагаю, используя SSH)
  • Потенциально глубокое дерево зависимостей
11.11.2016
  • Если это не убедит всех просто использовать композитор, ничто не поможет… 11.11.2016
  • Во-первых, текущая версия composer нуждается в proc_open (), который доступен не везде. Есть и другие проблемы. Хотя я согласен с тем, что у композитора есть свои достоинства, я всегда знал, что однажды столкнусь с проблемой, и именно в этот день. Мне еще предстоит выяснить, как установить общую библиотеку для более чем 50 клиентских приложений (с использованием Composer). 23.08.2017
  • Я бы хотел, чтобы разработчики библиотек перестали использовать композитор. Его нельзя использовать в любой серьезной производственной среде. Люди, которые прячутся за «просто используйте композитор», вообще не понимают, что они делают. 07.06.2018
  • смеется в JS 05.11.2020
  • Я предполагаю, что @ObedMarquezParlapiano пытается сказать, что управление пакетами - это просто инструмент для решения проблем зависимостей проекта, и жалобы на первое часто вызываются последними, потому что, по крайней мере, стандартный инструмент PHP де-факто достаточно надежен, как любой кто боролся с NPM Node.js. может утверждать. Конечно, могу ошибаться. 05.11.2020
  • Это лучшее объяснение саркастического комментария, которое я когда-либо видел за всю свою жизнь. И вы правы, что делает его еще лучше. 05.11.2020

  • 2

    Вы можете попробовать https://php-download.com/, который в большинстве случаев поможет вам загрузить все зависимости. вместе с папкой vendor. Это обещания композитора не требуются. Пробовал сам. Он находит и создает все необходимые папки и заархивирует их для загрузки. Прекрасно работает !!

    03.07.2017
  • Работает отлично! Спасибо !! 04.10.2017
  • Это должен быть принятый ответ. Он просто делает то, что делает композитор, а затем возвращает zip 10.10.2017
  • В нем нет всех библиотек с github. Когда я пытаюсь использовать это, например: github.com/mgp25/Instagram-API, это говорит, что не может его найти. 04.11.2017
  • Протестировал, работал, сэкономил часы на обходе и включении зависимостей. 16.11.2017
  • С сожалением сообщаю, что этот сайт действительно использует Composer под капотом. Полученный вами ZIP-файл включает composer.json, composer.lock и каталог vendor с файлом autoload.php и папку composer. Мне до сих пор неясно, какие проблемы возникают у людей с Composer, поэтому я не могу понять, почему этот сайт вообще существует: -? 18.01.2018
  • В приведенном выше ответе указано так много шагов, в то время как веб-сайт упрощает его до 1 загружаемого шага. Я не программист профессионально, но PHP позволяет мне делать безумные вещи так легко, что мне никогда не приходилось изучать SSH, композитор или пакет .... Они предназначены для вундеркиндов и профессионалов .... Веб-сайт снял это ограничение .. ... Я считаю, что все, кто проголосовал за мой ответ, считают, что веб-сайт делает это лучше, чем композитор ... Если вы можете это сделать ... Это поможет всем программистам, не являющимся компьютерными фанатами. 19.01.2018
  • @ ÁlvaroGonzález. Лично меня не волнует, компилирует ли композитор проект на какой-то другой машине. У меня просто нет прав на установку на всех машинах, на которых я работаю, и иногда мне нужно получить библиотеку на машине с Windows без запуска exe-файла. Я ценю композитора, я просто не всегда могу его использовать, что было неприятно без предварительной компиляции этого сайта для меня. 12.04.2018
  • @AuntJemima Признаюсь, я действительно не знал, что есть пакеты, требующие прав администратора. Во всяком случае, я разделяю вашу боль, я также знаю, каково это работать на ужасно неадекватном компьютере. 13.04.2018
  • @AuntJemima также, это просто плохая практика - оставлять композитора на производственной машине, где безопасность - это больше, чем шутка в комнате отдыха. Композитор должен умереть ужасной смертью и уйти с ней. 07.06.2018
  • Веб-сайт не работает. 10.03.2020
  • Работая идеально для меня, я отправляю уведомление в приложение iOS, Apple удалит старый метод ssl через несколько месяцев. 10.12.2020
  • К сожалению, php-download.com теперь требует, чтобы вы подписались на их сайт, чтобы иметь возможность использовать его :( 22.04.2021

  • 3

    Я использую общий хостинг для веб-сайта и не могу выполнять там команды. Помимо запуска композитора через запрос php-скрипта, который я запрашиваю через браузер, я обычно использую этот рабочий процесс:

    • Убедитесь, что у вас установлен php локально.
    • Сделайте каталог на рабочем столе.
    • загрузите composer.phar со страницы https://getcomposer.org/download/ (под заголовком * Загрузка вручную ) и поместите его в каталог.
    • создайте файл composer.json и вставьте в него следующее содержимое

       {
           "require": {
               "coinbase/coinbase": "~2.0"
           }
       }
      
    • Перейдите в каталог с оболочкой по вашему выбору (bash, git-bash, cmd, windows bash)

    • введите php composer.phar update снимок экрана с выводом bash
    • Загрузите каталог поставщика на свой веб-сервер через ftp или любой другой механизм, который вы используете.
    • включить в свой проект php, в который вы загружаете свои библиотеки (измените путь туда, где вы загрузили каталог поставщика, чтобы он включал этот файл автозагрузки)

      require_once('vendor/autoload.php');
      

    Таким образом, вы получаете преимущество управления зависимостями, и вам не нужно вручную включать все миллионы файлов и загружать все зависимости вручную, а обновить их так же просто, как ввести php composer.phar update, а затем заменить каталог поставщика на вашем сервере на новый.

    18.01.2018

    4

    Мне пришлось сделать это для FTP-сервера, к которому у меня не было доступа по SSH. Сайт, указанный здесь, работал, затем я понял, что вы можете просто установить композитор на свой собственный сервер (используя версию PHP вашей целевой), а затем скопировать все файлы.

    13.09.2017
  • Это должен быть ответ. У меня отлично сработало, 20.09.2017
  • Не могли бы вы лучше объяснить свой ответ? Простите за мою глупость. 04.11.2017
  • @IchHabsDrauf В основном он хочет использовать композитор (в этой части это не совсем ответ), а затем копировать файлы в производственную среду. Я бы сказал, что, возможно, есть люди без композитора и в среде разработки, поэтому на самом деле это не anwser. 16.01.2018

  • 5

    Это не лучшее решение, но для меня это было большим подспорьем в большинстве случаев: https://github.com/Wilkins/composer-file-loader

    Позвольте вам загрузить файл composer.json так же, как это сделал бы композитор. Это позволяет загружать файл composer.json без композитора (теоретически достаточно PHP 5.2).

    Я знаю, что вопрос старый, но надеюсь, что он кому-то поможет.

    15.12.2017

    6

    Альтернативное решение, которое сработало для меня (поскольку загрузка php была отключена), может быть реализовано путем создания собственного небольшого локального загрузчика композитора.

    1. Загрузите и установите XAMPP локально: https://www.apachefriends.org/index.html
    2. Загрузите и установите композитор локально: https://getcomposer.org/download/
    3. Откройте командную строку, выберите c:\temp и просто введите зависимость композитора, например: composer require league/oauth2-client
    4. Скопируйте файлы из папки c:\temp на свой веб-хост с помощью программы FTP.
    5. Добавьте это в начало вашего php: require("vendor/autoload.php");
    11.05.2020
  • Работал как шарм! Спасибо за это :) 09.06.2020

  • 7

    Анализируем проблему

    Проблема при установке зависимостей без Composer - это система автозагрузки.

    Composer использует самодельный автозагрузчик на основе карты массивов, это стандарт де-факто. Но эта система автозагрузки, к счастью в данном случае, не совместима с PSR-4.

    PSR-4 - это стандарт de-iure для автозагрузки класса в PHP, поэтому вы не можете избежать автозагрузки. Вы должны использовать один из них.

    Предложение решения

    В этом случае этот великолепный автозагрузчик PSR-4 можно настроить вручную. для автоматической загрузки VendorClass в VendorNamespace в любом месте вашего кода, если вам нужен пользовательский autoload.php файл на ранней стадии исходного кода.

    Пример из реальной жизни

    Давайте посмотрим на этот пример: у меня есть устаревший проект, который не может и не будет использовать Composer никогда и никогда, даже если Бог позволит это чудом. Этот проект можно ускорить с помощью этого фантастического пакета для сценариев командной строки. Это структура каталогов моего проекта:

     - src
     - tests
     - vendor (not the Composer's one)
    

    Этот пакет имеет следующую структуру каталогов:

     - examples
     - src
       - Commando
     - tests
    

    Единственное, что мне нужно, это папка src. Поместить эту папку в папку моего поставщика было бы нормально. Итак, мой пользовательский автозагрузчик будет таким:

    // Constants
    $base_path = "path\to\my\project";
    $autoloader_class = '\vendor\MarcoConsiglio-Wichee\PSR-4-Autoloading\Psr4AutoloaderClass.php';
    define("BASE_PATH", str_replace("\\", DIRECTORY_SEPARATOR, $base_path));
    
    // Autoloader
    require_once BASE_PATH.'\vendor\MarcoConsiglio-Wichee\PSR-4-Autoloading\Psr4AutoloaderClass.php';
    
    // Init the autoloader.
    $package = [
        "nategood\commando" => [
            "namespace" => "Commando",
            "path" => str_replace("\\", DIRECTORY_SEPARATOR, '\vendor\nategood\commando\src\Commando')
        ],
        "kevinlebrun\colors.php" => [
            "namespace" => "Colors",
            "path" => str_replace("\\", DIRECTORY_SEPARATOR, '\vendor\kevinlebrun\colors.php\src\Colors')
        ]
    ];
    
    // Register namespaces.
    $loader = new \PSR4\Psr4AutoloaderClass;
    $loader->register();
                          // Namespace                                      // Path to source
    $loader->addNamespace($package["nategood\commando"]["namespace"],       BASE_PATH.$package["nategood\commando"]["path"]);
    $loader->addNamespace($package["nategood\commando"]["namespace"],       BASE_PATH.$package["nategood\commando"]["path"]."\Util");
    $loader->addNamespace($package["kevinlebrun\colors.php"]["namespace"],  BASE_PATH.$package["kevinlebrun\colors.php"]["path"]);
    

    Теперь я могу использовать пакет команд в любом месте моего проекта!

    За и против

    Это решение позволяет:

    • Легко и вручную создайте свой собственный пользовательский автозагрузчик (вам нужно только указать VendorNamespace и папку (и), где искать VendorClasses в VendorNamespace.
    • Свободно организуйте зависимость от композитора в любом месте папки проекта (а почему бы и нет, вне ее)
    • Импортируйте пакет композитора, как он есть в вашем проекте (либо загрузка локально с помощью Composer, либо клонирование репозитория пакетов) или его соответствующую часть (например, удаление файла composer.json или файлов, для которых требуется автозагрузчик композитора).

    Минусы:

    • Создание собственного автозагрузчика вручную означает работу над всеми необходимыми зависимостями вашего проекта (надеюсь, не очень).
    • Ошибки в путях к исходным файлам пакетов могут быть утомительными и неприятными.
    • Работает только с именами файлов, совместимыми с PSR-4 (т. Е. Не может использовать имя файла A.class.php)
    30.11.2020
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]