python - setup.py sdist flattings 包文件结构,删除中间文件夹

标签 python python-2.7 setup.py pypi

文件结构:

.
|-- rdir
|   |-- __init__.py
|   |-- core
|   |   |-- __init__.py
|   |   |-- rdir_core.py
|   |   |-- rdir_node.py
|   |-- generateHTML
|   |   |-- __init__.py
|   |-- rdir.py
|-- setup.py

安装.py:

from setuptools import setup, find_packages

setup(
  name="rdir",
  version="0.40",
  description="....",
  author="lhfcws",
  author_email="lhfcws@gmail.com",
  url="...",
  license="MIT",
  packages=["rdir"],
  scripts=["rdir/rdir.py"],
  install_requires=['colorama', 'pyquery'],
  )

命令:

sudo python setup.py install         #local install
sudo python setup.py sdist upload    #pypi upload

尝试在其他路径(例如主目录)中使用from rdir import rdir,仅满足:

ImportError: No module named core.rdir_core

当然,如果我在项目目录中导入rdir,效果很好。 我查看了 site-packages/rdir.egg-info/,发现所有 .py 文件都被移动到平面结构中:

EGG-INFO
├── PKG-INFO
├── SOURCES.txt
├── dependency_links.txt
├── not-zip-safe
├── requires.txt
├── scripts
│   ├── __init__.py
│   ├── generate_page.py
│   ├── rdir.py
│   ├── rdir_core.py
│   └── rdir_node.py
└── top_level.txt

我也尝试过,如果我只是在 rdir.py 中 import rdir_core ,它会正确编译。所以我猜测我的setup.py有问题,我阅读了一些demo,github上一些著名python项目的setup.py以及一些官方手册。我根据这些引用更改了 setup.py,但都失败了。我不知道所以我必须寻求帮助。

我的setup.py有问题吗?或者我错过了什么?

或者请给我展示一个多文件结构项目的 setup.py 的好例子。谢谢!

顺便说一句,如果以上这些不能为您提供足够的信息,请查看rdir on Github

最佳答案

这是 setup.pypackages 关键字的问题。您应该列出子包以及顶级包。

packages=['rdir', 'rdir.core', 'rdir.generateHTML'],

或者,使用您已导入的find_packages

packages=find_packages(),

我没有尝试 sdist 的东西,也许它只是将所有 py 文件收集为脚本。

附注您可以使用python setup.py build来测试结果文件夹结构。

关于python - setup.py sdist flattings 包文件结构,删除中间文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27872028/

相关文章:

python - 如何使用 setup.py 安装动态库?

python - 从列表中选择随机数,然后将其删除?

python-2.7 - Python中的车辆检测、计数和分类

python - 使用 matplotlib 更改线条样式比例间距

python - `setup.py` `install_requirements` 在 Conda 环境中 : force use of `pip`

python - 我应该如何处理在我的 setup.py 脚本中导入第三方库?

python - PEP 424 __length_hint__() - 有没有办法对生成器或 zipper 做同样的事情?

python - 使用 Python、Kubernetes api 调用 YAML 到 JSON

python - 如何使用同一图片的二进制蒙版图像裁剪图像以去除python中的背景?

python - 在 Python 3.5 中使用 PyEval_EvalCode