3

我有一个网站框架,我想在多个项目中使用,但我不想将我的框架提交给 PyPi。无论如何我可以告诉我的 setup.py 从特定位置安装框架吗?

这是我当前的 setup.py

from setuptools import setup

setup(
    name='Website',
    version='0.2.1',
    install_requires=[
        'boto>=2.6',
        'fabric>=1.4',
        'lepl>=5.1',
        'pygeoip>=0.2.4',
        'pylibmc>=1.2.3',
        'pymongo>=2.2',
        'pyyaml>=3.1',
        'requests>=0.12',
        'slimit>=0.7.4',
        'thrift>=0.8.0',
        'tornado>=2.3',
    ],
)

这些依赖项实际上是我的框架的所有依赖项,所以如果我能以某种方式包含它,我只能在此处列出框架。

4

1 回答 1

2

看起来您的所有要求都是公开的(在 PyPI 上),并且您不需要它们的特定版本,只需“足够新”即可。在 2016 年,当您可以指望每个人都有最新版本的pip. 如果您只是pip install .从源目录或pip install git+https://url/to/package类似目录中获取,它只会从网络中提取最新版本的依赖项。您的包不在 PyPI 上的事实不会阻止 pip 在那里找到它的依赖项。

或者,如果您想将它们全部存储在本地,您可以设置一个本地 PyPI 索引。尽管在这种情况下,将您的包推送到同一个本地索引并从那里安装它可能会更简单。

如果您需要更复杂的东西,需求文件可以为您处理。

特别是,如果您需要将包分发给组织中可能没有设置您团队的本地索引的其他人,或者由于某种原因您一开始就无法设置本地索引,您可以将所有需求文件中的必要信息——或者,如果更合适的话,在用于安装你的包的命令行上(如果你坚持使用easy_install或旧版本,它甚至可以工作pip)。

文档提供了完整的细节,这篇博文很好地解释了它,但简短的版本是这样的:

  • 如果您有本地 PyPI 索引,请提供--extra-index-url=http://my.server/path/to/my/pypi/.

  • 如果你有一个 HTTP 服务器,你可以将包放在上面,并且你可以在你的服务器中启用“自动索引目录内容”选项,只需提供--find-links=http://my.server/path/to/my/packages/.

  • 如果您想使用本地文件(或 SMB/AFP/等文件共享),请创建一个简单的 HTML 文件,其中只包含指向所有本地包的链接,并提供--find-links=file:///path/to/my/index.html.

同样,这些可以在“安装这个包,运行这个”(或curl | sh安装脚本)的命令行上,但通常你只想把它们放在一个需求文件中。如果是这样,请确保每个选项仅使用一个值(例如,如果要添加两个额外的索引,请添加两个--extra-index-url参数)并将每个值放在自己的行中。

需求文件还允许您指定每个包的特定版本,因此您可以确保人们使用您开发和测试的相同代码进行部署,这在这些情况下通常很有用。

于 2012-11-13T01:40:42.913 回答