【问题标题】:Python Development Mode: ModuleNotFoundError: No module named xxxxPython开发模式:ModuleNotFoundError: No module named xxxx
【发布时间】:2018-07-29 03:58:04
【问题描述】:

我在 python 中有一个项目,如果通过“python do.py”调用它就可以正常工作,但是当我在开发模式下安装它并且脚本导入我的模块时,我得到一个“ModuleNotFoundError”。这是我的 setup.py

from setuptools import setup, find_packages


with open('README.rst') as f:
    readme = f.read()

with open('LICENSE') as f:
    license = f.read()

setup(
    name='do-pack',
    version='0.1dev',
    description='A command-line tool to create python packages',
    long_description=readme,
    author='Carlos Montecinos Geisse',
    author_email='carlos.w.montecinos@gmail.com',
    url='https://github.com/wilfredinni/do-pack',
    license=license,
    packages=find_packages(exclude=('tests', 'docs')),
    include_package_data=True,
    install_requires=['click'],
    python_requires='>=3',
    entry_points={
        'console_scripts': [
            'do = do.do:main',
        ]
    },
)

这是结构(主要和模块在do/中):

[树][1]

这是我使用 python do.py 时的调用:

(python-cli) λ python do.py
Usage: do.py [OPTIONS] COMMAND [ARGS]...

  Simple CLI based script to make your Repository Structure.

Options:
  --help  Show this message and exit.

Commands:
  assistant  A step by step assistant.
  create     creates an empty proyect structure.

而且,这是我在开发模式下运行时的输出:

(python-cli) λ do
Traceback (most recent call last):
  File "C:\Users\carlo\Envs\python-cli\Scripts\do-script.py", line 11, in <module>
    load_entry_point('do-pack', 'console_scripts', 'do')()
  File "c:\users\carlo\envs\python-cli\lib\site-packages\pkg_resources\__init__.py", line 572, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "c:\users\carlo\envs\python-cli\lib\site-packages\pkg_resources\__init__.py", line 2755, in load_entry_point
    return ep.load()
  File "c:\users\carlo\envs\python-cli\lib\site-packages\pkg_resources\__init__.py", line 2408, in load
    return self.resolve()
  File "c:\users\carlo\envs\python-cli\lib\site-packages\pkg_resources\__init__.py", line 2414, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "c:\dropbox\dropbox\projects\python\do-pack\do\do.py", line 3, in <module>
    import skeleton
ModuleNotFoundError: No module named 'skeleton'

谢谢。

【问题讨论】:

标签: python setuptools packaging setup.py pypi


【解决方案1】:
  1. 确保do 文件夹内有一个__init__.py 文件。 2。在 setup.py 中将“do”添加到 packages= kwarg 看起来你处理好了find_packages()

工作示例

+ app
|+ do
 |+ __init__.py
 |+ do.py

setup.py

从 setuptools 导入设置

setup(
    name="cliapp",
    version='0.1',
    packages=['do'],
    entry_points='''
        [console_scripts]
        do=do.do:run
    ''',
)

do.py

def run():
    print('Completed')

从 app/ 文件夹,安装并运行:

>>> pip install .
>>> do
Completed

更新


我在本地运行了你的代码,看起来它可能只是你代码中的一个 python 相对/绝对导入问题。

如果您使用完全绝对导入,它应该可以工作:

do.py

代替

import skeleton
import licenses
import setup_config

您需要使用绝对或相对包导入

# Absolute
from do import skeleton
from do import licenses
from do import setup_config

# Relative
from . import skeleton
from . import licenses
from . import setup_config

【讨论】:

  • 里面有一个init.py。这是 github 存储库github.com/wilfredinni/do-pack,未找到的模块是“skeleton”或任何其他内部 do/
  • 刚刚看到你在使用 find_packages() 也应该没问题。我克隆了你的回购,它在这里工作正常。您只需要使用完整的绝对导入或相对导入:prntscr.com/iglmr1 `from do
  • 谢谢,现在完美了!这是我的第一个项目,所以它真的很有帮助
  • 棒极了,看来你做得很好,所以恭喜如果你的问题得到解决,请务必接受答案。
猜你喜欢
  • 2022-12-19
  • 2022-08-24
  • 2022-12-27
  • 2022-12-27
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2022-10-17
相关资源
最近更新 更多