为什么 setuptools 不复制子文件夹中的模块?
Why doesn't setuptools copy modules in a subfolder?
我有一个名为 hwrt 的项目(参见 GitHub, PyPI),其结构如下:
.
├── 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)
默认情况下,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
我有一个名为 hwrt 的项目(参见 GitHub, PyPI),其结构如下:
.
├── 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)
默认情况下,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