ピップは、この特定の依存関係がインストールされていないことを発見した場合、私はインストール中止するかしたい...
私が正しくあなたを理解していれば、独自のパッケージがでインストールされている場合は、あなたがチェックできますsetup.py
でそのパッケージからモジュールをインポートしようとすると、ImportError
にアボートします。
$ python setup.py sdist
:車輪がインストールにsetup.py
を起動しませんので、あなたがソースのtarとして、あなたのパッケージを配布する必要があり、今
from distutils.command.build import build as build_orig
from distutils.errors import DistutilsModuleError
from setuptools import setup
class build(build_orig):
def finalize_options(self):
try:
import numpy
except ImportError:
raise DistutilsModuleError('numpy is not installed. Installation will be aborted.')
super().finalize_options()
setup(
name='spam',
version='0.1',
author='nobody',
author_email='[email protected]',
packages=[],
install_requires=[
# all the other dependencies except numpy go here as usual
],
cmdclass={'build': build,},
)
:例として、インストールがnumpy
で中止すべきである、あなたの依存関係を言ってみましょう私は何ができる
$ pip install dist/spam-0.1.tar.gz
Processing ./dist/spam-0.1.tar.gz
Complete output from command python setup.py egg_info:
running egg_info
creating pip-egg-info/spam.egg-info
writing pip-egg-info/spam.egg-info/PKG-INFO
writing dependency_links to pip-egg-info/spam.egg-info/dependency_links.txt
writing top-level names to pip-egg-info/spam.egg-info/top_level.txt
writing manifest file 'pip-egg-info/spam.egg-info/SOURCES.txt'
reading manifest file 'pip-egg-info/spam.egg-info/SOURCES.txt'
error: numpy is not installed. Installation will be aborted.
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/_y/2qk6029j4c7bwv0ddk3p96r00000gn/T/pip-s8sqn20t-build/
注:numpy
が欠落している時に構築されたタールをインストールしようとするとになりますセットアップスクリプトの先頭にインポートチェック:
from setuptools import setup
try:
import numpy
except ImportError:
raise DistutilsModuleError(...)
setup(...)
しかし、この場合には、出力はフォーマットされず、完全なスタックトレースがあまりにも技術的であり、ユーザーを混乱させる可能性が標準出力にこぼれされます。代わりに、インストール時に呼び出されるdistutils
コマンドの1つをサブクラス化して、エラー出力が適切にフォーマットされるようにします。今
、第二部のために:
...または警告を印刷し、アンインストールの依存を続けます。
バージョン7 pip will swallow any output from your setup script以降、これはもう不可能です。 pipが冗長モードで実行されている場合、つまりpip install -v mypkg
の場合にのみ、セットアップスクリプトの出力が表示されます。あなたが私に尋ねるなら疑わしい決断。
それにもかかわらず、ここにあなたのセットアップスクリプトでの警告やエラーを発行する例を示します。
from distutils.log import ERROR
class build(build_orig):
def finalize_options(self):
try:
import numpy
except ImportError:
# issue an error and proceed
self.announce('Houston, we have an error!', level=ERROR)
# for warnings, there is a shortcut method
self.warn('I am warning you!')
super().finalize_options()
は 'cmdclass'のための任意のドキュメントはありますか?私はそれを見つけることができません。 – user2357112
@ user2357112これはPythonのstdlibの一部です。 [Distutilsを拡張する](https://docs.python.org/3.6/distutils/extending.html)は良い出発点であるはずです。 – hoefling