1
我有一个Python包,我用pip发布。我需要添加一些自定义代码在安装时要运行:使用pip安装运行自定义代码失败
from setuptools import setup
from setuptools.command.install import install
class CustomInstall(install):
def run(self):
install.run(self)
print "TEST"
setup(
...
cmdclass={'install': CustomInstall},
...)
我想这个问题可能点子抑制标准输出:Custom pip install commands not running。但后来我将print "TEST"
替换为创建文件并写入一些文本,但这也没有发生。
看来,当我创建并上传my_package测试的PyPI我自定义的run方法只发生:
python setup.py sdist bdist_wheel upload -r https://testpypi.python.org/pypi
而不是当我点子安装:
pip install -i https://testpypi.python.org/pypi my_package
也许我根本不了解pip和setuptools如何工作,但这与我预期的行为相反。
我的问题是:
- 我怎样才能让我的CustomInstall类工作?
和
- 当你调用
pip install
居然会发生什么?
我看过一个setuptools文档和PyPI文档,我一直没弄明白。看起来其他人已经取得了成功:Run custom task when call `pip install`,所以我不确定发生了什么问题。
是的,这是我用以及资源。我的困惑是,当我运行'python setup.py'时,自定义逻辑运行,但当我点击安装我的项目时运行。我认为run()方法会在'pip install my_project'上被调用。情况并非如此吗?如果是这样,是否有一种不同的方法,我可以在'pip install my_project'上运行子类? –
为了回答你的问题,因为我打了它:你需要发布你的软件包作为源代码分发(sdist)而不是轮子(bdist_wheel),因为在安装过程中setup.py不会被执行为轮子 – ChristopheLec