为了账号安全,请及时绑定邮箱和手机立即绑定

无法安装使用相同名称空间的两个软件包

无法安装使用相同名称空间的两个软件包

慕姐8265434 2021-03-29 17:15:14
当单独使用setup.py安装两个软件包时,它们的安装就很好。提取sdist生成的tarball并安装它们时,会发生相同的错误。这意味着问题出在我猜的setuptools内部。我开发了两个具有两个名称空间包的项目:testsuite和testsuite.prettyprint。这两个名称空间包__init__.py都包含:__import__('pkg_resources').declare_namespace(__name__)这是testsuite.prettyprint.outcomes的setup.py:import pkgutilfrom setuptools import setupdef get_packages():    return [name for _, name, is_package in pkgutil.walk_packages('.') if name.startswith('testsuite') and is_package]dependencies = ['nose2>=0.4.6', 'colorama>=0.2.5']setup(    name='testsuite-prettyprint-outcomes',    version='0.1.0-alpha.1',    packages=get_packages(),    url='',    license='BSD3',    author='Omer Katz',    author_email='omer.drow@gmail.com',    description='testsuite-prettyprint-outcomes is a nose2 plugin that prettyprints test outcomes.',    namespace_packages=['testsuite', 'testsuite.prettyprint'],    install_requires=dependencies)这是testsuite.prettyprint.traceback的setup.py:import pkgutilimport sysfrom setuptools import setupdef get_packages():    return [name for _, name, is_package in pkgutil.walk_packages('.') if name.startswith('testsuite') and is_package]dependencies = ['nose2>=0.4.6', 'pygments>=1.6']if sys.platform == 'win32':    dependencies.append('colorama>=0.2.5')setup(    name='testsuite-prettyprint-traceback',    version='0.1.0-alpha.2',    packages=get_packages(),    url='',    license='BSD3',    author='Omer Katz',    author_email='omer.drow@gmail.com',    description='testsuite-prettyprint-traceback is a nose2 plugin that prettyprints traceback on failures and errors.',    namespace_packages=['testsuite', 'testsuite.prettyprint'],    install_requires=dependencies)
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

name您的软件包的s看起来不对。我只是将一个项目分成多个子包,而我做的另一件事是使每个项目name与的组件匹配namespace_packages。


因此,对于testsuite.prettyprint.outcomes:


setup(

       name='testsuite.prettyprint.outcomes',

       [...] ,

       namespace_packages=['testsuite', 'testsuite.prettyprint']

)

对于testsuite.prettyprint.traceback:


setup(

       name='testsuite.prettyprint.traceback',

       [...] ,

       namespace_packages=['testsuite', 'testsuite.prettyprint']

)

为了使此功能正常运行,您需要__init__.py为所有父namespace_package级(例如到)提供脚本,就像已经显示的那样testsuite.prettyprint。


namespace_packages在zope子软件包中可以找到生产软件包的很好的例子。


例如,请参见zope.app.cache setup.py脚本,网址为http://svn.zope.org/zope.app.cache/trunk/setup.py?view=markup


查看完整回答
反对 回复 2021-04-06
  • 3 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号