首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能导入我自己创建的Python包?

为什么我不能导入我自己创建的Python包?
EN

Stack Overflow用户
提问于 2016-04-13 11:23:04
回答 4查看 326关注 0票数 2

我刚刚创建了一个package (这里的消息来源),但是安装后使用它有困难。一个简单的导入就给了我一个ImportError

下面,我将展示我所做的一切,以便您能够复制它:

代码语言:javascript
复制
$ git clone git@github.com:kramer65/peewee-versioned.git
Cloning into 'peewee-versioned' 
etc. etc.
Checking connectivity... done.
$ virtualenv venv
New python executable in the/path/to/my/venv/bin/python
Installing setuptools, pip, wheel...done.
$ . venv/bin/activate
(venv) $ cd peewee-versioned/
(venv) $ python setup.py install
running install
etc. etc. everything installs without errors
Finished processing dependencies for peewee-versioned==0.1
(venv) $ cd ..
(venv) $ pip freeze
peewee==2.8.0
peewee-versioned==0.1  # AS YOU CAN SEE IT IS INSTALLED
six==1.10.0
(venv) $ python
Python 2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import peewee
>>> import peewee_versioned
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named peewee_versioned

我的setup.py看起来是这样的:

代码语言:javascript
复制
from setuptools import setup, find_packages

setup(
    name='peewee-versioned',
    version='0.1',
    packages=find_packages(exclude=['test', 'test.*']),
    include_package_data=True,
    platforms='any',
    install_requires=[
        'peewee',
        'six'
    ],
)

项目中唯一相关的文件是versioned.py (参见全部来源在这里)

有人知道我在这里做错了什么吗?欢迎所有小费!

编辑

我在venv站点中检查了是否有与我的包相关的鸡蛋,还有(查看第五个包):

代码语言:javascript
复制
$ ls -l venv/lib/python2.7/site-packages/
total 512
-rw-r--r--   1 kramer65  staff     276 13 apr 13:53 easy-install.pth
-rw-r--r--   1 kramer65  staff     126 13 apr 13:53 easy_install.py
-rw-r--r--   1 kramer65  staff     367 13 apr 13:53 easy_install.pyc
-rw-r--r--   1 kramer65  staff  242923 13 apr 13:53 peewee-2.8.0-py2.7.egg
-rw-r--r--   1 kramer65  staff     970 13 apr 13:53 peewee_versioned-0.1-py2.7.egg
drwxr-xr-x  34 kramer65  staff    1156 13 apr 13:53 pip
drwxr-xr-x  10 kramer65  staff     340 13 apr 13:53 pip-8.1.1.dist-info
drwxr-xr-x   6 kramer65  staff     204 13 apr 13:53 pkg_resources
drwxr-xr-x  52 kramer65  staff    1768 13 apr 13:53 setuptools
drwxr-xr-x  12 kramer65  staff     408 13 apr 13:53 setuptools-20.7.0.dist-info
drwxr-xr-x   5 kramer65  staff     170 13 apr 13:53 six-1.10.0-py2.7.egg
drwxr-xr-x  32 kramer65  staff    1088 13 apr 13:53 wheel
drwxr-xr-x  11 kramer65  staff     374 13 apr 13:53 wheel-0.29.0.dist-info

那为什么我不能进口呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-15 13:45:03

由于存储库中没有任何包,而且只有一个名为versioned.py的文件,所以在运行python setup.py install之后,您应该能够将其作为import versioned导入。为我工作:

代码语言:javascript
复制
$ mkvirtualenv peewee
New python executable in peewee/bin/python
...
$ git clone https://github.com/kramer65/peewee-versioned
Cloning into 'peewee-versioned'...
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 20 (delta 5), reused 18 (delta 5), pack-reused 0
Unpacking objects: 100% (20/20), done.
Checking connectivity... done.
$ cd peewee-versioned/
$ python setup.py install
running install
...
Finished processing dependencies for peewee-versioned==0.1
$ pip freeze
peewee==2.8.0
peewee-versioned==0.1
six==1.10.0
wheel==0.24.0
$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import versioned
>>>

无论如何,由于您希望从peewee_versioned导入它,我将在这里做两件事:

  • versioned.py重命名为peewee_versioned.py
  • 遵循列出各个模块文档段落,使用py_modules: py_modules = 'peewee_versioned‘
票数 5
EN

Stack Overflow用户

发布于 2016-04-15 14:02:57

我认为您必须包括单独的版本模块,因为您没有包。我不认为find_package方法会找到solo模块。

尝试将py_modules =“版本化”添加到设置中,如:

代码语言:javascript
复制
setup(
    name='peewee-versioned',
    version='0.1.1',
    packages=find_packages(exclude=['test', 'test.*']),
    include_package_data=True,
    platforms='any',
    install_requires=[
        'peewee',
        'six'
    ],
    py_modules = ['versioned']
)

在此之后,您应该能够导入版本。

票数 2
EN

Stack Overflow用户

发布于 2016-04-15 13:55:05

如果您只需要名称,可以使用"进口作为“功能:

代码语言:javascript
复制
import versioned as peewee_versioned
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36596851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档