我有一个Python包,我用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},
...)
我认为问题可能会抑制stdout:Custom pip install commands not running。但后来我用print "TEST"
替换了创建文件并编写了一些文本,这也没有发生。
看来我的自定义运行方法只在我创建并上传my_package以测试PyPI时才会发生:
python setup.py sdist bdist_wheel upload -r https://testpypi.python.org/pypi
而不是当我pip安装它时:
pip install -i https://testpypi.python.org/pypi my_package
也许我从根本上不了解pip和setuptools是如何工作的,但这与我预期的行为相反。
我的问题是:
和
pip install
时会发生什么? 我查看了setuptools文档和PyPI文档,但我还没有弄明白。似乎其他人已经取得了成功:Run custom task when call `pip install`,所以我不确定出了什么问题。
答案 0 :(得分:0)
pip是一个用于从Python包安装Python包的工具 索引。
当我遇到同样的问题时,我会提到这个:
https://blog.niteoweb.com/setuptools-run-custom-code-in-setup-py/
答案 1 :(得分:0)
所以我不确定这有多大帮助,但是我最近处理了一个类似的问题,这就是我学到的东西。
您的自定义安装代码似乎正确。但是,除了run
之外,还有更多可以覆盖的方法。另一个有用的方法是finalize_options
,因为您可以编写代码来动态更改setup.py
的参数(例如here。)
这是一个非常好的问题。pip install
会根据各种因素来做各种事情。您从哪里安装软件包?来自PyPI还是其他软件包索引?包裹如何分发?它是二进制dist(.whl)还是源dist(.gz)文件?您要通过本地目录安装软件包吗?通过VCS URL进行远程回购?在每种情况下,Pip不一定都使用相同的方法。我建议使用-vvv
标志来查看点子到底在做什么。无论出于什么原因,它可能都没有运行setuptools的install
命令...
packages=setuptools.find_packages(),
include_package_data=True
在您的setup.py
文件中?没有这些行,pip可能会安装软件包的元数据,而不是软件包本身。