python install package作为另一个包的子包

时间:2014-05-16 15:09:39

标签: python package installation

我正在使用eclipse / pydev在python 2.7中开发一个程序(“homie”),它包含几个外部API提供程序的接口。那些继承了位于__init__.py

homie.interfaces内的genric Interface-Class

现在,所有这些接口都应包含在homie.interfaces的子包中,例如homie.interfaces.foohomie.interfaces.bar。 遵循分而治之的概念,我为每个接口实现创建了新项目,包含相应的包,例如foo,分别为bar

问题是,我的setup.py脚本在安装过程中当然找不到包myprogram.interfaces.foo。 示例:worknet接口

#! /usr/bin/env python

from distutils.core import setup

setup(
    name='Worknet-DBs Interface',
    version='0.1-indev',
    author='Richard Neumann',
    author_email='mail@richard-neumann.de',
    packages=['homie.interfaces.worknet'],
    data_files=[],
    license=open('LICENSE.txt').read(),
    description='Interface implementation for the Worknet APIs',
    long_description=open('README.txt').read(),
)

将产生:

[neumannr@neumann-homeinfo worknet.tmp]$ python ./setup.py install
running install
running build
running build_py
error: package directory 'homie/interfaces/worknet' does not exist
[neumannr@neumann-homeinfo worknet.tmp]$ 

如果我只指定worknet而不是homie.interfaces.worknet,它当然会安装到homie.interfaces的用户基础实例中。 如何告诉脚本将worknet包安装到homie.interfaces,其路径为homie.interfaces.worknet

1 个答案:

答案 0 :(得分:3)

package_dir

指向您的包目录

package_dir参数可以提供有关在何处查找包的信息。

指向现有的worknet目录

假设worknet目录直接位于项目根目录中,您应将参数package_dir添加到setup来电

package_dir = {'homie.interfaces': ''}

将包移至子目录homie/interfaces

另一种选择是,重新组织代码目录。例如,您创建路径homie/interfaces/并在其中移动现有的worknet子目录。

在这种情况下,您可以添加

package_dir = {'homie.interfaces': 'homie/interfaces'}