【问题标题】:Should pip-installing my python app automatically install dependencies?pip-installing 我的 python 应用程序是否应该自动安装依赖项?
【发布时间】:2018-03-21 09:38:44
【问题描述】:

我是 python 打包和分发的新手。我有一个要 pip 安装的 python 应用程序,所以我为它创建了一个 setup.py。

现在 setup.py 有 install_requires ,它会在缺少依赖项时发出警报,但我想知道我是否可以/应该提供一种方法来自动安装缺少的依赖项。目前该应用需要一个自主开发的共享包,无需外部包。

编辑:

我的 setup.py:

from setuptools import setup

setup(
    name="TcpMonitor",
    version="1.0",
    packages=["tcpmonitor"],
    py_modules=["tcp_monitor"],
    install_requires=[
        "CommonPyLib",
    ],
    entry_points='''
        [console_scripts]
        tcp_monitor_gui=tcpmonitor:main
    '''
)

Pip 安装输出:

Collecting CommonPyLib (from TcpMonitor==1.0)
  Could not find a version that satisfies the requirement CommonPyLib (from TcpMonitor==1.0) (from versions: )
No matching distribution found for CommonPyLib (from TcpMonitor==1.0)

【问题讨论】:

  • 我认为你如何接近它是要走的路。但是,要自动安装它们,我认为您可以创建一个文本文件并在其上调用 pip install ......类似于stackoverflow.com/questions/7225900/…
  • 通常用户会使用 Pip 安装你的包,因此install_requires 中列出的依赖项将被自动安装。
  • @Josh 你确定吗?我收到一个错误:“找不到满足要求 的版本”。我错过了什么吗? (将 setup.py 添加到问题中)
  • @EladWeiss 查看 Simon 的回答——你的 CommonPyLib 包不在 PyPI 上,所以 Pip 不知道如何安装它。

标签: python pip


【解决方案1】:

只要依赖项列在install_requires 列表中,它就会自动检查该模块,如果不存在,它将安装它,前提是该模块可以从PyPi 安装。如果不是(在 PyPi 上找不到该包),您将收到 Could not find a version that satisfies the requirement 错误。

我在 PyPi 上找不到任何具有此名称的包,因此您需要添加要安装在 PyPi 上的依赖项,以便通过 pip 安装,如果您将包托管在其他地方(例如 GitHub),这可能会提供解决方案:How can I make setuptools install a package that's not on PyPI?

运行pip install commonpylib 返回

找不到满足commonlib要求的版本(来自版本:) 没有为 commonpylib 找到匹配的分布

所以你没有设置脚本问题,但在 PyPi 上查找包时遇到了问题(似乎不存在),或者至少 Python 不知道你将它托管在哪里。

另一个选项是将该软件包与您正在分发的内容集成,而不使其成为依赖项(即,将其添加到 __init__.py 文件等)。

【讨论】:

  • 优秀。我现在知道了!谢谢。
  • 太棒了。没问题。 :)
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2012-07-25
  • 2018-09-27
  • 2011-01-20
  • 2016-11-07
相关资源
最近更新 更多