Что мне нужно сделать с моим кодом Python, чтобы он стал модулем? - PullRequest
3 голосов
/ 14 февраля 2012

Может кто-нибудь сказать мне, что я делаю неправильно, чтобы упаковать это как модуль: 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'],
)

Iпытаюсь сделать "импорт zxing".Я делаю установку setup.py, помещаю ее в /usr/local/lib/python2.7/dist-packages/, но импорт 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 голосов
/ 14 февраля 2012

Когда вы делаете

import zxing.zxing

все работает (dir(zxing.zxing) = ['BarCode', 'BarCodeReader', ...]).Вероятно, вы хотите, чтобы люди просто использовали

import zxing

Если это то, что вы хотите, вы должны поместить следующий код в zxing/__init__.py

from zxing import *

Или намного лучше

from zxing import BarCode, BarcodeReader, ...
2 голосов
/ 15 февраля 2012

Посмотрите на трассировку стека, URL которой вы указали в комментарии:

/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, удалите ее.

...