我的Python代码需要做什么才能成为模块?
有人能告诉我我在把这个打包成模块时做错了什么吗: https://github.com/xamox/python-zxing。
我的setup.py文件内容如下:
#!/usr/bin/env python
from distutils.core import setup
setup(
name='zxing',
version='0.1',
description="wrapper for zebra crossing (zxing) barcode library",
url='http://simplecv.org',
author='Ingenuitas',
author_email='public.relations@ingenuitas.com',
packages=['zxing'],
)
我想要执行“import zxing”。我运行了setup.py install,这样它就放在了/usr/local/lib/python2.7/dist-packages/目录下,但执行import zxing时却不成功。
我遇到了以下错误:
In [1]: import zxing.zxing
---------------------------------------------------------------------------
ResolutionError Traceback (most recent call last)
/home/xamox/<ipython-input-1-9ff7d0755c55> in <module>()
----> 1 import zxing.zxing
/usr/local/bin/zxing.py in <module>()
3 __requires__ = 'zxing==0.1'
4 import pkg_resources
----> 5 pkg_resources.run_script('zxing==0.1', 'zxing.py')
/usr/lib/python2.7/dist-packages/pkg_resources.pyc in run_script(self, requires, script_name)
465 ns.clear()
466 ns['__name__'] = name
--> 467 self.require(requires)[0].run_script(script_name, ns)
468
469
/usr/lib/python2.7/dist-packages/pkg_resources.pyc in run_script(self, script_name, namespace)
1192 script = 'scripts/'+script_name
1193 if not self.has_metadata(script):
-> 1194 raise ResolutionError("No script named %r" % script_name)
1195 script_text = self.get_metadata(script).replace('\r\n','\n')
1196 script_text = script_text.replace('\r','\n')
ResolutionError: No script named 'zxing.py'
2 个回答
6
当你执行
import zxing.zxing
时,一切都正常运作(dir(zxing.zxing) = ['BarCode', 'BarCodeReader', ...]
)。可能你希望大家只需要使用
import zxing
如果这是你想要的效果,你需要把以下代码放到 zxing/__init__.py
文件里
from zxing import *
或者更好的方法是
from zxing import BarCode, BarcodeReader, ...
2
看看你在评论中提到的那个错误追踪信息:
/usr/local/bin/zxing.py in <module>()
3 __requires__ = 'zxing==0.1'
4 import pkg_resources
----> 5 pkg_resources.run_script('zxing==0.1', 'zxing.py')
这说明它试图从 /usr/local/bin/zxing.py
加载一些东西,而这个文件里的代码在你当前的版本中并不存在,比如 "import pkg_resources"。这看起来像是之前实验留下的垃圾。把它删掉吧。
现在你有了一个干净的环境:
一个空的 __init__.py
文件和一个只有一个源文件的包,看起来没什么意义。我建议你删除 __init__.py
,并清除所有其他实验的痕迹(特别是 "build" 目录)。如果有一个文件夹 /usr/local/lib/python2.7/dist-packages/zxing
,也把它删掉。