显然我关于在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:'module'对象没有属性'timeID'
当我输入p2p.time
时,我得到:
模块'p2p.time'来自'/home/gabe/anaconda/lib/python2.7/site-packages/p2p/time/init.pyc'
我已经用Google搜索了属性错误,并在昨天的大部分时间里都在阅读如何创建python包。我究竟做错了什么? (最终这看起来就像使用简单的模块和自动加载器一样容易。由于Python中的相对路径限制,我不确定如何构建一个能够正确导入模块的自动加载器,而不仅仅是转储我的整个库目录结构进入道路。)
from distutils.core import setup
setup(
name='p2p',
version='0.1.0',
author='Me',
author_email='me@example.com',
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=[
"",
],
)
import time
# http://www.php2python.com/wiki/function.microtime/
def timeID():
return time.time()
答案 0 :(得分:0)
P2P /时间/ time.py
那你去吧。您想要p2p.time.time.timeID
。或者你可以把它放在p2p/time/__init__.py
中。