【问题标题】:Python packaging distribute post-install stepPython 打包分发安装后步骤
【发布时间】:2013-02-27 03:52:58
【问题描述】:

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

我尝试了以下方法,但它不起作用,说ImportError: No module named nltk。我认为这是因为 import nltk 发生在通过调用 setup(...) 安装 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},
)

【问题讨论】:

    标签: python packaging setuptools distutils distribute


    【解决方案1】:

    pip 不处理依赖项,因此您需要编写一个 README 文件并解释您的用户他们需要安装什么,或者一个脚本在您需要的所有东西上运行 pip install。

    我认为第二种方式是可行的方法,以及解释正在发生的事情的 README 文件。

    作为一个 debian 维护者,我可以告诉你,在那里执行下载东西的安装命令被认为是不可接受的,它必须被打包列出对其他包的依赖关系,然后在满足依赖关系时安装你的,我认为总体而言,这是一种明智的做法。 http://wiki.debian.org/UpstreamGuide#No_Downloads

    【讨论】:

      【解决方案2】:

      我用命令行安装方法,成功了。 像这样……

      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())
      

      【讨论】:

        猜你喜欢
        • 2020-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多