【问题标题】:Script installed with setup.py raises ImportError使用 setup.py 安装的脚本引发 ImportError
【发布时间】:2016-03-19 15:13:06
【问题描述】:

我正在尝试使用setup.py 为我的项目添加一个可运行的脚本。我将它添加到setupscripts= 参数中。当我从项目./solver 运行该脚本时,它运行良好。我用sudo python setup.py install 安装它,并尝试用solver 运行它,但我得到ImportError: No module named 'model'。如何使用 setuptools 正确安装和运行我的脚本?

SOLVER/
    solver/
        model/
            __init__.py
        view/
             __init__.py
        controller/
             __init__.py
        __init__.py
        main.py 
        solver <-- starts the app
    setup.py
    README.md
    LICENCE

setup.py:

#!/usr/bin/env python3
import os
from setuptools import setup, find_packages

setup(
    name='SOLVER',
    version='1.0.0',
    description='SOLVER app test',
    author=['me'],
    license='BSD',
    classifiers=['Programming Language :: Python :: 3 :: Only'],
    packages=['solver'],
    #packages=find_packages(exclude=["doc", "tests"]),
    install_requires=['numpy>=1.10.4'],
    scripts=['solver/solver'],
)

solver:

#!/usr/bin/env python3

from solver import main
main.gui_mode()

【问题讨论】:

    标签: python setuptools setup.py


    【解决方案1】:

    您需要在packages 参数中列出所有包,包括子包。您可以使用find_packages 为您生成该列表。目前,您只是在 solver/ 目录中安装 Python 文件。

    from setuptools import setup, find_packages
    
    setup(
        ...
        packages=find_packages(),
        ...
    )
    

    您还应该使用entry_points 而不是scripts,尤其是当您的脚本所做的只是导入和调用一个函数时。 Setuptools 将从使用正确 Python 二进制文件的入口点构建脚本。

    setup(
        ...
        packages=find_packages(),
        entry_points={
            'console_scripts': [
                'solver=solver.main:gui_mode'
            ]
        ...
        }
    

    您可以在开发模式下安装包来获取脚本,而不是自己编写。

    pip install -e .
    

    您也应该使用pip 安装到系统。它会跟踪已安装的内容,以便您稍后将其卸载。

    pip install .
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 2017-03-11
      • 2013-10-03
      • 2015-01-04
      • 2013-03-05
      相关资源
      最近更新 更多