【问题标题】:Confused about the package_dir and packages settings in setup.py对 setup.py 中的 package_dir 和 packages 设置感到困惑
【发布时间】:2013-06-17 20:02:37
【问题描述】:

这是我的项目目录结构,其中包括项目文件夹,加上 包含在多个项目之间共享的包和模块的“框架”文件夹 它与项目文件夹位于层次结构中的同一级别:

--------------------------------------------------------------
Framework/
    package1/
        __init__.py
        mod1.py
        mod2.py
    package2/
        __init__.py
        moda.py
        modb.py

My_Project/
    src/
        main_package/
             __init__.py
             main_module.py
    setup.py
    README.txt
--------------------------------------------------------------

这是我的 setup.py 文件内容的部分列表:

--------------------------------------------------------------
from distutils.core import setup

setup(packages=['package1',
        'package2.moda',
        'main_package'],
    package_dir={'package1': '../Framework/package1', 
        'package2.moda': '../Framework/package2', 
        'main_package': 'src/main_package'})

--------------------------------------------------------------

以下是问题:

  1. 没有创建 dist 或 build 目录

  2. Manifest 文件已创建,但会列出 package2 中的所有模块,而不仅仅是“moda.py”模块

  3. 构建因错误而终止: README.txt:函数不正确

我不知道我是否有一个问题(可能与我的目录结构有关)或者我是否有多个问题,但我已经阅读了有关 Python 应用程序分发的所有内容,但我很难过。

【问题讨论】:

  • FTR 只从一个包(package2.moda)中分发一个子模块是我所知道的任何打包工具都不支持的功能,它也会在运行时导致导入问题。

标签: python distutils


【解决方案1】:

如果我理解正确,package_dir 中的路径应该停在 Python 包目录的父目录处。换句话说,试试这个:

package_dir={'package1': '../Framework', 
             'package2': '../Framework', 
             'main_package': 'src'})

【讨论】:

  • 看来我必须将其指定为 {'package1': '../Framework/package1', 'package2': '../Framework/package2'} 否则我会收到错误抱怨没有找到 init.py 文件。如上所述,我还不断收到错误消息 - 输出以错误结尾:My_Project-1.0\README.txt: Incorrect function 如果我删除 README.txt 文件,我会收到一条警告说它丢失了,但仍然收到错误消息:错误: My_Project-1.0\Setup.py: 函数不正确
  • 有了这个package_dir,你应该执行import package1package2吗?
  • 是的,这就是目标。
  • @SteveSawyer 你能解决这个问题吗?我在一条类似的船上。谢谢
【解决方案2】:

我遇到过类似的问题,通过指定根文件夹和该根目录中的包的规范来解决。

我的包有以下结构:

.
├── LICENSE
├── README.md
├── setup.py
└── src
    └── common
        ├── __init__.py
        ├── persistence.py
        ├── schemas.py
        └── utils.py

setup.py 包含 package_dirpackages 行:

package_dir={"myutils": "src"},
packages=['myutils.common'],

运行python setup.py bdist_wheel并安装.whl文件后,可以使用以下方式调用包:

import myutils.common

【讨论】:

猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2021-11-28
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多