【问题标题】:Custom Python Package Won't Properly Install via Pip In VirtualEnv自定义 Python 包无法通过 VirtualEnv 中的 Pip 正确安装
【发布时间】:2013-02-26 02:47:50
【问题描述】:

我为我正在处理的项目创建了一个新的 python 包。

它的文件夹结构类似于:

bin
docs
mypackage
license.md
readme.md
setup.py

这是我的 setup.py 的内容:

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

config = {
    'description': 'A python client for foo',
    'author': 'Me',
    'url': 'https://github.com/account/mypackage',
    'download_url': 'https://github.com/account/mypackage',
    'author_email': 'foo@bar.com',
    'version': '0.1',
    'install_requires': ['nose'],
    'name': 'MyPackage'
}

setup(**config)

我还没准备好公开这个,所以我直接从 Git 安装它:

pip install git+ssh://git@github.com/account/mypackage.git

这是输出:

Downloading/unpacking git+ssh://git@github.com/account/mypackage.git
  Cloning git+ssh://git@github.com/account/mypackage.git to /var/folders/7w/qsdf76s97sfsdf7sdf97sdf/T/pip-ovbMpR-build
  Running setup.py egg_info for package from git+ssh://git@github.com/account/mypackage.git

Downloading/unpacking nose (from MyPackage==0.1)
  Downloading nose-1.2.1.tar.gz (400kB): 400kB downloaded
  Running setup.py egg_info for package nose

    no previously-included directories found matching 'doc/.build'
Installing collected packages: nose, MyPackage
  Running setup.py install for nose

    no previously-included directories found matching 'doc/.build'
    Installing nosetests script to /Users/user/sandbox/.pyvirtualenvs/project/bin
    Installing nosetests-2.7 script to /Users/user/sandbox/.pyvirtualenvs/project/bin
  Running setup.py install for MyPackage

Successfully installed nose MyPackage
Cleaning up...

它说它安装正确,但是当我检查 /Users/user/sandbox/.pyvirtualenvs/project/bin 时 - 我没有看到我的 MyPackage。

我看到鼻子安装正确,它创建了一个 MyPackage-0.1-py2.7.egg-info/ 目录 - 但我的库中没有 mypackage 文件夹。

因此,当我尝试使用该包时,找不到它。

为什么?我的 setup.py 是否配置错误?

【问题讨论】:

  • 不确定这是否会对您有所帮助,但如果您“还没有准备好将其公开”,您可以使用 python setup.py develop 安装您的软件包。如果我有一个想要使用的包,但它“还没有准备好公开”,我通常会这样做。
  • 我正在做的部分工作是在最终用户安装体验上线之前测试它,这就是我选择这条路线的原因。我知道这不是苹果对苹果,但它应该仍然有效。

标签: python package pip setup.py


【解决方案1】:

看起来您实际上并没有指示安装程序安装您的软件包。

你需要这样的东西:

packages=['mypackage'],

在您的setup() 电话中。查看py-bootstrap 是如何做到的:https://github.com/splaice/py-bootstrap/blob/master/setup.py

要包含bin 脚本,您还需要使用scripts 指令列出您的脚本,例如:

scripts=['bin/myscript']

【讨论】:

  • 是的。刚刚想通了。顺便说一句,Pytjon Setup Doc 写得不好。对新包作者一点也不友好。
  • doremi:我很想得到您的反馈以改进文档。您能否在 bugs.python.org 上打开一份报告,或者如果您更愿意给我发邮件? (我的地址在我的个人资料上)
  • @ÉricAraujo:尽管遵循了官方指南,但出于同样的原因,我遇到了同样的问题。我想为最简单的用户案例获取分步指南将是一个好主意(我想在我的项目之间共享一个纯 python 包并将其导入,就好像它在文件中一样,而无需复制它每一次)。在解释什么是轮子、PEP 命名约定和 Co 之前,包括项目结构、设置结构和分步指南,对于像我这样的新手来说,这将是一个很好的加分项。
  • 好吧,您在问题中链接到的页面确实以使用 packages=[...] 的示例开头。
猜你喜欢
  • 2020-10-24
  • 2011-12-16
  • 2017-07-27
  • 2016-01-24
  • 2019-11-28
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
相关资源
最近更新 更多