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

时间:2015-01-10 01:49:35

标签: 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

Setup.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有错误,我在github上阅读了一些演示,一些着名python项目的setup.py和一些官方手册。我根据这些参考更改了我的setup.py,但都失败了。我不知道所以我必须寻求帮助。

我的setup.py有问题吗?还是有什么我错过的?

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

顺便说一句,如果上述内容无法提供足够的信息,请查看rdir on Github

2 个答案:

答案 0 :(得分:1)

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

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

或者,使用您已导入的find_packages

packages=find_packages(),

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

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

答案 1 :(得分:0)

受雷的启发,我自己解决了。

这是scriptssetup.py的问题。

该项目是一个扁平的结构,所以它在0.30之前运作良好。但是,在我的计算机中,脚本选项会将script安装到/usr/local/bin并在EGG中生成一个扁平结构。

如果我不删除/usr/local/bin中的旧脚本,python解释器将首先在/usr/local/bin下检查这些脚本并导致错误。

所以解决方案是:

  1. 删除scripts
  2. 中的setup.py
  3. 设置packages=find_package()
  4. sudo rm / usr / local / bin / rdir *
  5. 谢谢大家。