自定义Python包在虚拟环境中无法通过Pip正确安装

2 投票
1 回答
678 浏览
提问于 2025-04-17 17:04

我为我正在做的一个项目创建了一个新的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。

我看到nose安装得很成功,并且创建了一个MyPackage-0.1-py2.7.egg-info/的目录,但没有包含我的库的mypackage文件夹。

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

这是为什么呢?我的setup.py配置错了吗?

1 个回答

3

看起来你并没有真正告诉安装程序去安装你的包。

你需要在你的 setup() 调用中加一些东西,比如:

packages=['mypackage'],

可以看看 py-bootstrap 是怎么做的:https://github.com/splaice/py-bootstrap/blob/master/setup.py

如果你想包含 bin 脚本,你还需要用 scripts 指令来列出你的脚本,比如:

scripts=['bin/myscript']

撰写回答