【问题标题】:Python homemade package import error after pip installpip安装后python自制包导入报错
【发布时间】:2017-12-12 17:36:22
【问题描述】:

如果我像这样制作一个非常简单的包(带有空的__init__.py 文件):

package_name/
    package_name/
         sub_module/
              __init__.py
              file.py  
         __init__.py
    setup.py

当我在这个项目的根目录下启动一个 Python shell 时:

import package_name.sub_module.file

一切顺利,我可以使用file.py 中的功能。但是如果我在 GitLab 上发送这个项目,然后将它 pip 安装在另一个本地项目中并以相同的方式导入,我会收到以下错误:

ModuleNotFoundError: No module named 'package_name.sub_module'

我尝试以多种方式修改__init__.py 文件,但找不到有效的方法。我不明白为什么会这样。

编辑:这是setup.py文件的内容:

from setuptools import setup

setup(name='package_name',
      version='0.1',
      description='My package',
      url='https://gitlab.myserver.com/package_name',
      author='Me',
      author_email='me@myserver.com',
      license='MIT',
      packages=['package_name'],
      install_requires=[
          'another_package_1',
          'another_package_2'
      ],
      zip_safe=False)

要使用 pip 安装包,我使用命令:

pip install git+https://gitlab.myserver.com/package_name.git

【问题讨论】:

  • 问题的根源可能在setup.py 内部或在您的安装步骤中。你向setup() 传递了什么论据?您输入了哪些命令来安装软件包?没有它,就不可能知道出了什么问题。
  • 我敢打赌这是packages kwarg。你用packages=['package_name'] 调用你的setup 函数吗?
  • 我按照 pip 打包教程中的说明进行操作。明天我会用它的内容编辑这个问题。是的,我使用 package=['package_name'] 命令。
  • 我刚刚发现了 'packages=find_packages(exclude=['contrib', 'docs', 'tests*'])' 选项。我想我误解了包裹的声明方式。如果我必须手动执行,是否意味着我必须编写 packages=['package_name', 'package_name.sub_module' ?
  • @debzsud 确切地说,您必须按其全名明确列出 all 包。包括foo 并不意味着包括foo.bar。建议使用setuptools 中的find_packages 函数,这样您就不必每次创建新包时都更新包列表。

标签: python pip package python-import


【解决方案1】:

看看这个网站https://docs.python.org/3/distutils/setupscript.html
您必须在项目结构中声明每个子文件夹

packages=['an_example_pypi_project', 'tests'],

|-- an_example_pypi_project
|   |-- __init__.py
|   |-- useful_1.py
|   |-- useful_2.py
|-- tests
|-- |-- __init__.py
|-- |-- runall.py
|-- |-- test0.py

|-- an_example_pypi_project
|   |-- __init__.py
|   |-- useful_1.py
    |-- subfolder
|   |   |-- useful_2.py
|-- tests
|-- |-- __init__.py
|-- |-- runall.py
|-- |-- test0.py

packages=['an_example_pypi_project', an_example_pypi_project.subfolder, 'tests'],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多