【问题标题】:Import only works when module installed using --editable pip flag导入仅在使用 --editable pip 标志安装模块时有效
【发布时间】:2017-09-11 20:29:13
【问题描述】:

我有this project on github,它可以让我更轻松地执行一些 jekyll 操作。

当我克隆它并将其安装到我的 virtualenv (pip install virtualenv .) 中时,它工作正常,但如果我只是安装 没有 --editable 标志,当我尝试安装时会出现这些错误使用click公开的命令:

$ jk-config-set-editor Traceback (most recent call last):
File "/home/felipe/jekyll-utils/jekyll-venv/bin/jk-config-set-editor", line 7, in <module>
from jekyllutils.configs import set_editor
ImportError: No module named 'jekyllutils'

This is my setup.py file:

from setuptools import setup

setup(
        name="jekyllutils",
        version='0.1',
        py_modules=['generators'],
        install_requires=[
            'click',
            'python-slugify',
            'appdirs',
            'toml'
        ],
        entry_points='''
        [console_scripts]
        jk-new = jekyllutils.generators:new_post
        jk-edit = jekyllutils.managers:edit_post
        jk-config-set-editor = jekyllutils.configs:set_editor
        jk-config-set-posts-path = jekyllutils.configs:set_path_to_posts_dir
        jk-config-dump-configs = jekyllutils.configs:dump_configs
        jk-config-clear-configs = jekyllutils.configs:clear_configs
    '''

)

任何人都知道为什么当--editable 处于打开状态时这有效,但在其他情况下无效?

【问题讨论】:

  • 你解决过这个问题吗?
  • 不,我只是使用 --editable
  • 好的,我不得不使用find_packages 来修复它

标签: python python-3.x pip virtualenv setuptools


【解决方案1】:

万一遇到同样的问题,对我有用的是使用find_packages 函数在setup.py 中定义我的包

我还必须使用 package_data 字段定义静态数据文件。

from setuptools import setup, find_packages

setup(
        name="jekyllutils",
        version='0.1',
        py_modules=['generators'],
        install_requires=[
            'click',
            'python-slugify',
            'appdirs',
            'toml'
        ],
        entry_points='''
            [console_scripts]
            jk-new = jekyllutils.generators:new_post
            jk-edit = jekyllutils.managers:edit_post
            jk-config-set-editor = jekyllutils.configs:set_editor
            jk-config-set-posts-path = jekyllutils.configs:set_path_to_posts_dir
            jk-config-dump-configs = jekyllutils.configs:dump_configs
            jk-config-clear-configs = jekyllutils.configs:clear_configs
        ''',
        packages=find_packages(),
        package_data={
            "": ["*.txt", "*.json", "*.csv", "*.html"],
        },

)

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多