MacのXAMPPで pear install phpunit/PHPUnit すれども Duplicate package channel となる場合

 

Mac OSX Mountain Lion環境で
XAMPP1.7.3にPHPUnitを入れるため、
sudo pear install -a phpunit/PHPUnit
をしようにも、

Did not download optional dependencies: phpunit/PHP_Invoker, use –alldeps to download automatically
Duplicate package channel://pear.phpunit.de/File_Iterator-1.3.3 found
Duplicate package channel://pear.phpunit.de/File_Iterator-1.3.2 found
install failed

と出てきてインストールに失敗する。
そもそもバージョン1.3.xとかおかしいし!
PHPUnitの最新版はバージョン3.x系だし!!

どこかの海外掲示板で
Duplicate package は、
「依存関係にあるパッケージが
 正しくインストールされていない可能性がある」
と書かれているのを見た。

そして行き着いたのがここ。

http://dustyreagan.com/downgrade-phpunit-3-6-to-3-5-15/

PHPUnitをダウングレードする方法が掲載されている。
これが逆に、最新版PHPUnitをインストールするヒントになった。

このサイトでは、PHPUnitをダウングレードするために
PHPUnitが依存するパッケージを一度アンインストールして
古いPHPUnitに要求される依存パッケージを
バージョン指定して再インストール、
それから古いPHPUnitをインストールするという手法が紹介されている。

【注意:これは古いPHPUnitがインストールされる手順です】

sudo pear uninstall phpunit/PHPUnit
sudo pear uninstall phpunit/DbUnit
sudo pear uninstall phpunit/PHP_CodeCoverage
sudo pear uninstall phpunit/File_Iterator
sudo pear uninstall phpunit/Text_Template
sudo pear uninstall phpunit/PHP_Timer
sudo pear uninstall phpunit/PHPUnit_MockObject
sudo pear uninstall phpunit/PHPUnit_Selenium
sudo pear uninstall pear.symfony-project.com/YAML

sudo pear install pear.symfony-project.com/YAML-1.0.2
sudo pear install phpunit/PHPUnit_Selenium-1.0.1
sudo pear install phpunit/PHPUnit_MockObject-1.0.3
sudo pear install phpunit/PHP_Timer-1.0.0
sudo pear install phpunit/File_Iterator-1.2.3
sudo pear install phpunit/PHP_CodeCoverage-1.0.2
sudo pear install phpunit/Text_Template-1.0.0
sudo pear install phpunit/DbUnit-1.0.0
sudo pear install phpunit/PHPUnit-3.5.15

これが、PHPUnitが依存するパッケージ一覧として役に立った。

おそらくここにリストされているパッケージを
正しくインストールすれば、
最新版PHPUnitがインストールできるようになるはずである。

結論としては、以下のとおりである。

//事前に行う
sudo pear update-channels
sudo pear upgrade -a PEAR
sudo pear upgrade-all
sudo pear config-set auto_discover 1
sudo pear clear-cache
//必要になる場合あり
sudo pear channel-discover pear.phpunit.de
//以下手順
sudo pear install pear.symfony-project.com/YAML
sudo pear install phpunit/File_Iterator-1.3.2
sudo pear install phpunit/Text_Template-1.1.2
sudo pear install phpunit/PHP_Timer
sudo pear install phpunit/PHPUnit_MockObject
sudo pear install phpunit/PHP_TokenStream-1.1.4
sudo pear install phpunit/PHP_CodeCoverage
sudo pear install phpunit/PHPUnit
sudo pear install phpunit/PHPUnit_Selenium
sudo pear install phpunit/DbUnit

以下、
途中間違えたり、今後変更があった場合のための参考にめも。

たとえば次のようにインストールが失敗した場合、
sudo pear install phpunit/PHP_CodeCoverage
phpunit/PHP_CodeCoverage requires package “phpunit/File_Iterator” (version >= 1.3.0, version <= 1.3.2), installed version is 1.3.3

phpunit/PHP_CodeCoverageのインストールには、
phpunit/File_Iteratorの1.3.0〜1.3.2が必要にもかかわらず
現在インストールされているのは1.3.3であるため
phpunit/PHP_CodeCoverageはインストール出来ない、
ということを示す。

このケースでは
sudo pear uninstall phpunit/File_Iterator
してから
sudo pear install phpunit/File_Iterator-1.3.2
とすることで
sudo pear install phpunit/PHP_CodeCoverage
が実行可能になる。

また次のような場合
sudo pear uninstall phpunit/Text_Template
phpunit/Text_Template (version >= 1.1.1, version <= 1.1.2) is required by installed package “phpunit/PHPUnit_MockObject”
phpunit/Text_Template cannot be uninstalled, other installed packages depend on this package

これはText_Templateの1.1.1〜1.1.2が
phpunit/PHPUnit_MockObjectに依存されているため削除できない。
sudo pear uninstall phpunit/PHPUnit_MockObject
sudo pear uninstall phpunit/Text_Template
の順にアンインストールして対応する。

上記結論はこうして依存関係を探っていった末、
現時点で行き着いたインストール手順となる。

ちなみに当環境では、
~/.bash_profile に以下の通り、XAMPPのPEARまでパスを通している。
export PATH=”/Applications/XAMPP/xamppfiles/bin:$PATH”

この記事はお役に立ちましたか?


コメント

コメントする