第一个 Python 包:模块未加载

问题描述 投票:0回答:1

背景:

显然我关于用 Python 构建自动加载器的最佳方法的问题太宽泛了(https://stackoverflow.com/questions/25678974/python-autoloader)。不知道为什么...

我本来希望获得一些代码片段,以便在导入模块或构建包之间进行选择时让我的生活更轻松。但没那么多。所以我决定尝试构建一个 python 函数包来模拟 PHP 函数,例如 str_replace。

我将包命名为p2p,目录结构如下:

lib/p2p
  setup.py
  CHANGES.txt
  MANIFEST.IN
  README.txt
  /bin (empty)
  /docs (empty)
  /p2p
    __init__.py
    /str
      __init__.py
      str.py
    /time
      __init__.py
      time.py
    /json
      __init__.py
      json.py
    /utils
      __init__.py
      utils.py

__init__.py
都是空的。

在控制台中:

现在,当我构建包时(

python setup.py install
),我没有收到任何错误。当我
import p2p
时,我没有收到任何错误。但是,当我尝试使用
p2p.time.timeID()
时,我得到:

AttributeError:“模块”对象没有属性“timeID”

当我输入

p2p.time
时,我得到:

来自“/home/gabe/anaconda/lib/python2.7/site-packages/p2p/time/init.pyc”的模块“p2p.time”

我在 Google 上搜索了属性错误,并花了昨天的大部分时间阅读如何创建 python 包。我做错了什么? (最终,使用简单的模块和自动加载器似乎会更容易。由于 Python 中的相对路径限制,我不确定如何构建一个能够正确导入模块的自动加载器,而不只是转储整个库目录结构进入路径。)

lib/p2p/setup.py

from distutils.core import setup

setup(
    name='p2p',
    version='0.1.0',
    author='Me',
    author_email='[email protected]',
    packages=['p2p', 'p2p.test', 'p2p.str', 'p2p.time', 'p2p.json', 'p2p.utils'],
    package_dir={'p2p':'p2p', 'str':'p2p/str'},
    scripts=[],
    url='',
    license='LICENSE.txt',
    description='PHP to Python functions.',
    long_description=open('README.txt').read(),
    install_requires=[
        "",
    ],
)

lib/p2p/p2p/time/time.py

import time

# http://www.php2python.com/wiki/function.microtime/
def timeID():
    return time.time()

备注:

  • Ubuntu 14.04 桌面版
  • 使用 Python 2.7 的 Anaconda
  • 蜘蛛
  • 我是一名彻头彻尾的 Python 菜鸟,但已经在 PHP 和 Ruby 领域工作了几年了
python python-2.7 package
1个回答
0
投票

p2p/时间/time.py

好吧,就这样吧。你想要的是

p2p.time.time.timeID
。或者您也可以将其放入
p2p/time/__init__.py
中。

© www.soinside.com 2019 - 2024. All rights reserved.