文件结构:
.
|-- 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答案 0 :(得分:1)
这是packages
中setup.py
关键字的问题。您应该列出子包以及顶级包。
packages=['rdir', 'rdir.core', 'rdir.generateHTML'],
或者,使用您已导入的find_packages
packages=find_packages(),
我没有尝试sdist的东西,也许它只是将所有py文件收集为脚本。
P.S。您可以使用python setup.py build
来测试结果文件夹结构。
答案 1 :(得分:0)
受雷的启发,我自己解决了。
这是scripts
中setup.py
的问题。
该项目是一个扁平的结构,所以它在0.30之前运作良好。但是,在我的计算机中,脚本选项会将script
安装到/usr/local/bin
并在EGG中生成一个扁平结构。
如果我不删除/usr/local/bin
中的旧脚本,python解释器将首先在/usr/local/bin
下检查这些脚本并导致错误。
所以解决方案是:
scripts
setup.py
packages=find_package()
谢谢大家。