setup.py 发布 遭遇 ImportError

发布于 2022-08-31 20:19:41 字数 1010 浏览 17 评论 0

setup(
  name="rdir",
  version="0.45",
  description="....",
  url="...",
  license="MIT",
  packages=["rdir"],
  scripts=["rdir/rdir.py"],
  install_requires=['colorama', 'pyquery'],
  )

File strucure:

rdir
|-- __init__.py
|-- core
    |-- __init__.py
    |-- rdir_core.py
`-- generateHTML
    |-- __init__.py

然后无论我发布pypi还是本地install,错误如下:

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

# try `from rdir import rdir`
> ImportError: No module named core.rdir_core

我看了一下site-packages的rdir.egg里有个scripts文件夹,把所有.py文件都挪到同一层了,所以路径不对。但是我看了很多网上的写法,包括官方的文档和github一些人家的python项目的setup.py,看了一堆,packages、package_dir 改了又改还是不对。

求指教如何正确给多层package写打包的setup.py,谢谢。

======================

感谢大家,问题已解决,确实核心是script的问题。

解决方案: http://www.cnblogs.com/lhfcws/p/4215551.html

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倾城月光淡如水﹏ 2022-09-07 20:19:41

scripts 不是用来装 Python “脚本”的吧,人家指的是“可执行脚本”。如果你确实需要安装一个新“命令”,也可以使用 entry_points

官方文档请看:https://setuptools.pypa.io/en/latest/setuptools.html

手长情犹 2022-09-07 20:19:41

关于setuptools, 在Github上你可以找到很多相关的例子

多层Package打包, 一般是建议用 find_packages 工具让setup自动搜索
例如:

from setuptools import setup, find_packages  # Always prefer setuptools over distutils
from codecs import open  # To use a consistent encoding
from os import path

here = path.abspath(path.dirname(__file__))

packages=find_packages(exclude=['contrib', 'docs', 'tests*'])

print packages

setup(
    ....
    # You can just specify the packages manually here if your project is
    # simple. Or you can use find_packages().
    packages = packages,

    .....
)

另外 你的scripts的用法也是不对。 setuptools 里一般用entry_point 作为scripts的入口,
例如:

# To provide executable scripts, use entry points in preference to the
# "scripts" keyword. Entry points provide cross-platform support and allow
# pip to create the appropriate form of executable for the target platform.
entry_points={
    'console_scripts': [
        'zjobs=app.run:parse_process_args',
    ],
},

你可以参考一个github上的例子 -- 小弟前段时间写的一个工作的爬虫安装配置:

https://github.com/mengfeng/zjobs/blob/master/setup.py

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文