繁体   English   中英

自己的pip python包导入不起作用

[英]Own pip python package import doesn't work

我目前正在尝试创建我的第一个python包。 可悲的是我遇到了一些错误。 我只是试图定义一些应该导入的类。

这是我的文件夹结构

/pip-blitz-query
    /blitzjs_query
        __init__.py
        blitz.py
        blitz_http.py
        ...
    setup.py

这是当我尝试从blitzjs_query导入类Blitz时发生的blitzjs_query

>>> import blitzjs_query
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python34\lib\site-packages\blitzjs_query\__init__.py", line 1, in <module>
    from blitz import Blitz
ImportError: No module named 'blitz'

这是我的__init__.py文件:

from blitz import Blitz
from connection import Connection
from blitz_queue import Queue
from blitz_socket import Socket
from blitz_http import Http

最后是我的setup.py文件。 我尝试了__init__.py文件的不同变体,其中有些根本没有任何内容-但它永远无法正常工作

# Always prefer setuptools over distutils
from setuptools import setup, find_packages
# To use a consistent encoding
from codecs import open
from os import path

# Get the long description from the README file
here = path.abspath(path.dirname(__file__))
with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
    long_description = f.read()

setup(
    name='blitzjs_query',

    version='0.0.2',

    description='HTTP/Socket.io adapter for the blitz.js framework',
    long_description=long_description,

    url='https://github.com/nexus-devs/pip-blitz-query',

    author='Nexus Devs',
    author_email='nexus@nexus-stats.com',

    license='MIT',

    classifiers=[
        'Development Status :: 1 - Planning',
        'Intended Audience :: Developers',
        'Topic :: Internet :: WWW/HTTP',
        'License :: OSI Approved :: MIT License',

        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
    ],

    keywords='development blitz nexus socket.io http',

    packages=find_packages(),

    install_requires=['pymitter', 'socketIO-client', 'promise', 'requests'],
)

通常,您使用相对导入(在子模块前添加一个或多个. ):

from .blitz import Blitz
from .connection import Connection
from .blitz_queue import Queue
from .blitz_socket import Socket
from .blitz_http import Http

因为您没有创建名为blitz的模块,而是仅创建了一个模块blitzjs_query.blitz

您可以参考PEP 328了解有关相对和绝对导入的更多信息:

Guido宣布相对进口将使用前导点。 单个前导点表示从当前包开始的相对导入。 两个或多个前导点将相对导入当前程序包的父级,第一个之后的每个点一个级别。 [...]

您的模块名为blitzjs_query ,因此请在所有导入之前添加blitzjs_query.

像这样:

from blitzjs_query.blitz import Blitz
from blitzjs_query.connection import Connection
from blitzjs_query.blitz_queue import Queue
from blitzjs_query.blitz_socket import Socket
from blitzjs_query.blitz_http import Http

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM