显然我关于用 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 中的相对路径限制,我不确定如何构建一个能够正确导入模块的自动加载器,而不只是转储整个库目录结构进入路径。)
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=[
"",
],
)
import time
# http://www.php2python.com/wiki/function.microtime/
def timeID():
return time.time()
p2p/时间/time.py
好吧,就这样吧。你想要的是
p2p.time.time.timeID
。或者您也可以将其放入 p2p/time/__init__.py
中。