Я использую трудный путь изучения 2-го издания , чтобы научиться программировать. В упражнении 46 было дано указание сделать несколько вещей:
$ mkdir -p projects
$ cd projects/
$ mkdir skeleton
$ cd skeleton
$ mkdir bin NAME tests docs
$ touch NAME/__init__.py
$ touch tests/__init__.py
вот содержимое setup.py:
попробовать:
из настройки импорта настроек setuptools
кроме ImportError:
из distutils.core настройки импорта
config = {
'description': 'My Project',
'author': 'My Name',
'url': 'URL to get it at.',
'download_url': 'Where to download it.',
'author_email': 'My email.',
'version': '0.1',
'install_requires': ['nose'],
'packages': ['NAME'],
'scripts': [],
'name': 'projectname'
}
setup(**config)
Тесты / NAME_tests.py:
from nose.tools import *
import NAME
def setup():
print "SETUP!"
def teardown():
print "TEAR DOWN!"
def test_basic():
print "I RAN!"
Затем установите несколько пакетов:
- пункт от http://pypi.python.org/pypi/pip
- распространять с http://pypi.python.org/pypi/distribute
- нос от http://pypi.python.org/pypi/nose/
- virtualenv от http://pypi.python.org/pypi/virtualenv
Все это я делал без особой суеты (однажды я переключился с Windows на Ubuntu).
Зед (автор LPTHW) затем говорит, что вы можете проверить, правильно ли вы все сделали, выполнив следующее:
drewverlee@ubuntu:~/projects/skeleton$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.020s
OK
drewverlee@ubuntu:~/projects/skeleton$
Замечательно!
Но здесь есть проблема. В классе удеми (онлайн-урок) он копирует скелет в тестовый проект (cp -r skelton foobar) и делает примерно ...
zedscomp/projects/foobar: >>> nosetests
и Зед получает ошибку, например:
ImportError: Нет модуля с именем NAME
тогда Зед идет ...
grep -r "NAME" .
(что ему дает)
. / Tests / foobar_tests.py: импортировать NAME
Затем он объясняет, что «Это замечательная вещь в модульных тестах, потому что они ловят эти ошибки (ошибка zeds, по-видимому, в том, что он не переименовал import NAME для импорта foobar)
, поэтому я не получил эту ошибку, когда запускал тесты носа (хотя я и не переименовал NAME в foobar), что еще больше усложняло его. Зед сказал, что тесты носа должны запускаться только из родительского каталога, то есть скелета или foobar, а не из ребенок, как ИМЯ ... но когда я запускаю тестирование носа от имени
drewvcomp/project/foobar/name: >>> nosetests
работает нормально.
Итак, после прочтения большого количества тестов на нос и не видя, что я должен был выяснить, чтобы решить эту проблему, я просто удалил всю папку проекта, используя
rm -rf project
и восстановил его. Но не повезло, проблема сохраняется.
Предложение, приведенное ниже, заставило меня задуматься о том, что, возможно, проекты (и все, что в нем есть?) Проверяются Python. В этом случае, когда я запускал тесты носа в foobar, это было нормально, потому что он мог импортировать модуль с именем NAME (который существует в исходной директории скелета).
Итак:
import sys
sys.path
['', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/projectname-0.1-py2.7.egg', '/ usr / lib / python2.7 ',' /usr/lib/python2.7/plat-linux2 ',' /usr/lib/python2.7/lib-tk ',' /usr/lib/python2.7/lib -old ',' /usr/lib/python2.7/lib-dynload ',' /usr/local/lib/python2.7/dist-packages ',' /usr/lib/python2.7/dist-packages ' , '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages /gtk-2.0 ',' /usr/lib/pymodules/python2.7 ',' /usr/lib/python2.7/dist-packages/ubuntu-sso-client ',' /usr/lib/python2.7/ dist-packages / ubuntuone-client ',' /usr/lib/python2.7/dist-packages/ubuntuone-control-panel ',' /usr/lib/python2.7/dist-packages/ubuntuone-couch ',' /usr/lib/python2.7/dist-packages/ubuntuone-installer ',' /usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol ',' /var/src/Django-1.3.1 ',' /usr/lib/python2.7/dist-packages ',' /usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
Хлоп! Я должен убрать это! Мне действительно не нужно много другого, кроме оригинала и django (где мне это установить? ...)
также, если вам удастся прочитать все это, я буду любить вас вечно, если бы вы могли дать совет на шаге 6 в этой главе:
- установить с помощью setup.py и удалить с помощью pip
и под советом я имею в виду как ... потому что
setup install
дает мне package.egg-info, и я понятия не имею, что это такое!