Python包装分发安装后步骤

时间:2013-03-11 20:06:58

标签: python packaging setuptools distutils distribute

我正在打包一个使用nltk的项目。当您使用pip安装nltk时,您将获得核心功能,但不是所有随附的模块。要获取这些模块,请调用nltk的下载方法。

我尝试了以下内容,但它不起作用,说ImportError: No module named nltk。我假设发生了这种情况,因为在通过调用setup(...)安装nltk之前发生了import nltk。

是否有一种干净的方法,使用distribute执行安装后步骤,执行以下操作之一?

$ python -m nltk.downloader punkt
>>> import nltk; nltk.download('punkt')

这是我在setup.py尝试的失败:

class my_install(install):
    def run(self):
        install.run(self)
        import nltk
        nltk.download('punkt')

setup(
    ...
    install_requires = [..., 'nltk==2.0.4'],
    cmdclass={'install': my_install},
)

2 个答案:

答案 0 :(得分:0)

pip不处理依赖关系,因此您需要编写README文件并向用户解释他们需要安装的内容,或者在您需要的所有内容上运行pip install的脚本。

第二种方式是我认为的方式,以及解释发生了什么的README文件。

作为一个debian维护者,我可以告诉你,做一个下载东西的安装命令在那里被认为是不可接受的,它必须打包列出依赖关系到其他包然后安装你的,如果依赖性满足,我认为这是一种理智的方式。 http://wiki.debian.org/UpstreamGuide#No_Downloads

答案 1 :(得分:0)

我使用命令行安装方法并且成功了。 像这样...

import subprocess

class my_install(install):
    def run(self):
        install.run(self)
        cmd = ["python", "-m", "nltk.downloader", "punkt"]
        with subprocess.Popen(cmd, stdout=subprocess.PIPE) as proc:
            print(proc.stdout.read())