【问题标题】:Why doesn't setuptools copy modules in a subfolder?为什么 setuptools 不复制子文件夹中的模块?
【发布时间】:2015-06-18 23:43:47
【问题描述】:

我有一个名为 hwrt 的项目(参见 GitHubPyPI),其结构如下:

.
├── bin
├── docs
├── hwrt
│   ├── datasets
│   │   ├── crohme_eval.py
│   │   ├── __init__.py
│   │   ├── inkml.py
│   │   ├── README.md
│   │   └── results.csv
│   ├── __init__.py
│   ├── misc: Not important for this question
│   ├── selfcheck.py
│   ├── serve.py
│   ├── ... (more Python modules)
│   ├── templates: Not important for this question
│   └── view.py
├── LICENSE
├── Makefile
├── MANIFEST.in
├── README.md
├── requirements.txt
├── setup.cfg
├── setup.py
└── tests: Not important for this question

我的问题是

$ python
>>> from hwrt.datasets import inkml
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named datasets

root/of/project$ python
>>> from hwrt.datasets import inkml
>>> 

注意datasets 文件夹有__init__.py。所以这不是问题。一个(?)问题似乎是 setuptools 不复制数据集文件夹。除了在文件夹中放一个__init__.py 之外,我还需要做什么吗?

setup.py

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

config = {
    'name': 'hwrt',
    'version': '0.1.217',
    'author': 'Martin Thoma',
    'author_email': 'info@martin-thoma.de',
    'maintainer': 'Martin Thoma',
    'maintainer_email': 'info@martin-thoma.de',
    'packages': ['hwrt'],
    'scripts': ['bin/hwrt', 'bin/backup.py',
                'bin/test.py', 'bin/train.py',
                'bin/create_testset_online_once.py'],
    'package_data': {'hwrt': ['templates/*', 'misc/*']},
    'platforms': ['Linux', 'MacOS X', 'Windows'],
    'url': 'https://github.com/MartinThoma/hwrt',
    'license': 'MIT',
    'description': 'Handwriting Recognition Tools',
    'long_description': ("A tookit for handwriting recognition. It was "
                         "developed as part of the bachelors thesis of "
                         "Martin Thoma."),
    'install_requires': [
        "argparse",
        "theano",
        "nose",
        "natsort",
        "PyYAML",
        "matplotlib",
        "nntoolkit",
        "h5py",
        "flask",
        "flask-bootstrap",
        "requests",
        "six"
    ],
    'keywords': ['HWRT', 'recognition', 'handwriting', 'on-line'],
    'download_url': 'https://github.com/MartinThoma/hwrt',
    'classifiers': ['Development Status :: 3 - Alpha',
                    'Environment :: Console',
                    'Intended Audience :: Developers',
                    'Intended Audience :: Science/Research',
                    'License :: OSI Approved :: MIT License',
                    'Natural Language :: English',
                    'Programming Language :: Python :: 2.7',
                    'Programming Language :: Python :: 3',
                    'Programming Language :: Python :: 3.3',
                    'Programming Language :: Python :: 3.4',
                    'Topic :: Scientific/Engineering :: Artificial Intelligence',
                    'Topic :: Software Development',
                    'Topic :: Utilities'],
    'zip_safe': False,
    'test_suite': 'nose.collector'
}

setup(**config)

【问题讨论】:

  • 您是如何在运行 Python 的环境中安装模块的?
  • 我使用pip 安装它并使用sudo -H python setup.py installpip install hwrt --upgrade 切换升级。我都试过了,这两个命令都没有导致预期的结果。当我更改__version__(并显示更新版本)时,我确信它确实升级了。

标签: python packaging setuptools


【解决方案1】:

默认情况下,setup() 中的“packages”关键字不包括所有子包。它只查找包含在与 setup.py 相同的文件夹中的包。您可以简单地将“hwrt.datasets”添加到您的包列表中。

但是,如果您决定在项目中添加更多包,则以后可能会遇到麻烦,因此典型的用例是使用辅助函数 find_packages。

例如:

from setuptools import setup, find_packages

setup(
    # ...
    packages=find_packages(".")
)

http://setuptools.readthedocs.io/en/latest/setuptools.html#using-find-packages

【讨论】:

    猜你喜欢
    • 2015-08-09
    • 2020-01-26
    • 2020-04-26
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多