1
我想打包我的应用程序以在多个项目之间共享它。 我setup.py看起来是这样的:无法导入使用distutils发布的我自己的模块
# -*- 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
创建我
我在用我的foo_bar这样的应用程序的麻烦tar.gz文件。我通过PIP其安装到独立的virtualenv
pip install dist/foo_bar.tar.gz
和PIP冻结的输出表明,它是安装
foo-bar==1.0
bitstring==3.1.5
pytz==2016.4
wheel==0.24.0
当我尝试导入在Python控制台这个模块
import foo_bar
我得到ImportError: No module named 'foo_bar'
我错过了什么?
编辑:
我的文件结构如下:
foo_bar
├── dist
│ └── foo_bar-1.0.tar.gz
├── __init__.py
├── MANIFEST
├── bar.py
├── requirements.txt
├── setup.py
你还试过''安装python setup.py吗?你能提供你的目录结构吗?当你试图导入你的模块时,你是否在相同的virtualenv?你为什么使用''py_modules''而不是''packages''?这是更灵活... – ziky
@ziky我已更新我的帖子,包括目录结构。我使用单独的virtualenv,但在那里安装了foo_bar。 TBH,我没有听说过'包'选项,可以使用它来代替py_module是否有所作为? – mateuszb
你试图导入''foo_bar'',但是你的包里没有''foo_bar.py''!尝试将'bar.py''重命名为该名称。但是我从来没有使用过这种方式。通常你创建一个包('__init __。py''文件的目录)与''setup.py''是同一层。这意味着,你将在你的项目中创建另一个''foo_bar''目录,并且你会在这里放置''bar.py''。然后你会像导入foo_bar.bar一样导入它。 – ziky