【问题标题】:Python installed package won't import modulesPython安装包不会导入模块
【发布时间】:2015-05-13 11:18:19
【问题描述】:

我想创建一个可以从 CLI 执行的名为 knife 的 python 应用,问题是它无法导入模块。

我的文件结构是这样的:

my_project/
    knife/
        __init__.py
        knife.py
        external.py
    setup.py

我的 setup.py 看起来像这样:

#!/usr/bin/python

from setuptools import setup, find_packages

setup(name='Knife',
      version='0.3',
      description='Very cool project',
      author='John Doe',
      author_email='author@email.com',
      packages=find_packages(),
      py_modules=['knife.external'],
      scripts=['knife/knife.py'],
     )

我的knife.py 看起来像这样:

#!/usr/bin/python

import external

def main():
    print("Execute main function")

if __name__ == "__main__":
    main()

所以在使用 setup.py install 安装模块后,我尝试运行刀但一直抛出此错误:

$ knife.py 
Traceback (most recent call last):
  File "/usr/bin/knife.py", line 4, in <module>
    __import__('pkg_resources').run_script('Knife==0.3', 'knife.py')
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 723, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1643, in run_script
    exec(script_code, namespace, namespace)
  File "/usr/lib/python2.7/site-packages/Knife-0.3-py2.7.egg/EGG-INFO/scripts/knife.py", line 3, in <module>
    __requires__ = 'Knife==0.3'
ImportError: No module named external

到底发生了什么?我该如何解决?

【问题讨论】:

    标签: python module packages setuptools


    【解决方案1】:

    external.py 也应该发货。于是 setup.py 添加了 external.py:

      scripts=['knife/knife.py', 'knife/external.py'],
    

    【讨论】:

    • 如果 external.py 是文件夹而不是文件,我该怎么办? IE。刀/外部/__init__.py
    • 如果有很多依赖,有没有最简单的方法呢?我查看了 django 项目 setup.py,它只有一个 CLI 脚本文件,使用相同的结构我得到了错误:pkg_resources.ResolutionError: No script named 'knife.py'
    • 如果有人在上面的评论中有我的问题的答案,请在我的new question回答它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2019-12-09
    • 1970-01-01
    • 2017-07-08
    • 2019-05-08
    • 2018-01-21
    • 2018-04-23
    相关资源
    最近更新 更多