python - 无法导入我自己的使用 distutils 分发的模块

标签 python pip importerror distutils

我想打包我的应用程序以在多个项目之间共享。 我的 setup.py 如下所示:

# -*- coding: utf-8 -*-
from distutils.core import setup

setup(
    name='foo_bar',
    version='1.0',
    py_modules=['foo_bar'],
    install_requires=[
        'bitstring==3.1.5',
        'pytz==2016.4',
        'wheel==0.24.0', ]
)

然后我运行命令

python setup.py sdist

为我创建 tar.gz 文件

我在使用 foo_bar 应用程序时遇到问题。我通过 pip 将其安装到单独的 virtualenv

pip install dist/foo_bar.tar.gz

pip freeze 的输出表明它已安装

foo-bar==1.0
bitstring==3.1.5
pytz==2016.4
wheel==0.24.0

当我尝试在 python 控制台中导入此模块时

import foo_bar

我得到ImportError:没有名为“foo_bar”的模块

我缺少什么?

编辑:

我的文件结构如下所示:

foo_bar
├── dist
│   └── foo_bar-1.0.tar.gz
├── __init__.py
├── MANIFEST
├── bar.py
├── requirements.txt
├── setup.py

最佳答案

您能提供一下您的目录结构吗?当您尝试导入模块时,您是否在同一个 virtualenv 中?为什么使用py_modules而不是packages

此外,您正在尝试导入 foo_bar,但您的包中没有 foo_bar.py!尝试将 bar.py 重命名为该名称。

注意:我从未以这种方式使用过包。通常,您会在与 setup.py 相同的级别创建一个包(包含 __init__.py 文件的目录)。这意味着,您将在项目中创建另一个 foo_bar 目录,并在其中放置 bar.py。然后您可以像 import foo_bar.bar 一样导入它。

关于python - 无法导入我自己的使用 distutils 分发的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39311658/

相关文章:

python - 如何舍入数字

python - 为什么Python生成的ELF相对于原始源代码来说相当大?

python - Pip 不承认 Cython

python - 安装 Jupyter Notebook 时遇到问题

python - Django错误: Caught ImportError while rendering: No module named comments

python - 为什么在使用包的别名时从包中导入无效?

python - 导入错误:无法从 'metadata' 导入名称 'importlib'

python - 装饰器的注解

ubuntu - 无法通过 apt-get 在我的 Ubuntu 9.04 上安装 pip

python - 在给定范围内查找列表的所有可能子列表的高效和 Pythonic 方法,以及将其中的所有元素相乘后的最小乘积?