2013-02-14 4 views
14

Это мой setup.py файлмодуль Python не будет устанавливать

#!/usr/bin/env python 

from setuptools import setup 
from sys import path 

setup(name= 'conundrum', 
    version= '0.1.0', 
    author= 'elssar', 
    author_email= '[email protected]', 
    py_modules= ['conundrum'], 
    url= 'https://github.com/elssar/conundrum', 
    license= 'MIT', 
    description= 'A framework agnostic blog generator.', 
    long_description= open(path[0]+'/README.md', 'r').read(), 
    install_requires= [ 
     'PyYAML >= 3.0.9', 
     'Markdown >= 2.2.0', 
     'requests >= 1.0.4', 
     ], 
) 

Я попытался использовать как setuptools и distutils, но это не будет устанавливать мой модуль. Вместо этого я получаю

file module.py (for module module) not found 

Это моя структура каталогов

/module 
|--/test 
|--README.md 
|--license.txt 
|--module.py 
|--setup.py 

Просто чтобы быть ясно, модуль является корневой каталог.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

Это выход, когда я пытаюсь установить

[email protected]:/usr/local/src/conundrum$ sudo python /home/elssar/code/conundrum/setup.py install 
/usr/lib/python2.6/distutils/dist.py:250: UserWarning: 'licence' distribution option is deprecated; use 'license' 
    warnings.warn(msg) 
running install 
running bdist_egg 
running egg_info 
writing requirements to conundrum.egg-info/requires.txt 
writing conundrum.egg-info/PKG-INFO 
writing top-level names to conundrum.egg-info/top_level.txt 
writing dependency_links to conundrum.egg-info/dependency_links.txt 
warning: manifest_maker: standard file 'setup.py' not found 
file conundrum.py (for module conundrum) not found 
reading manifest file 'conundrum.egg-info/SOURCES.txt' 
writing manifest file 'conundrum.egg-info/SOURCES.txt' 
installing library code to build/bdist.linux-x86_64/egg 
running install_lib 
running build_py 
file conundrum.py (for module conundrum) not found 
file conundrum.py (for module conundrum) not found 
warning: install_lib: 'build/lib.linux-x86_64-2.6' does not exist -- no Python modules to install 
creating build/bdist.linux-x86_64/egg 
creating build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO 
zip_safe flag not set; analyzing archive contents... 
creating 'dist/conundrum-0.1.0-py2.6.egg' and adding 'build/bdist.linux-x86_64/egg' to it 
removing 'build/bdist.linux-x86_64/egg' (and everything under it) 
Processing conundrum-0.1.0-py2.6.egg 
removing '/usr/local/lib/python2.6/dist-packages/conundrum-0.1.0-py2.6.egg' (and everything under it) 
creating /usr/local/lib/python2.6/dist-packages/conundrum-0.1.0-py2.6.egg 
Extracting conundrum-0.1.0-py2.6.egg to /usr/local/lib/python2.6/dist-packages 
conundrum 0.1.0 is already the active version in easy-install.pth 

Installed /usr/local/lib/python2.6/dist-packages/conundrum-0.1.0-py2.6.egg 
Processing dependencies for conundrum==0.1.0 
Searching for requests==1.0.4 
Best match: requests 1.0.4 
Adding requests 1.0.4 to easy-install.pth file 

Using /usr/local/lib/python2.6/dist-packages 
Searching for Markdown==2.2.0 
Best match: Markdown 2.2.0 
Processing Markdown-2.2.0-py2.6.egg 
Markdown 2.2.0 is already the active version in easy-install.pth 
Installing markdown_py script to /usr/local/bin 

Using /usr/local/lib/python2.6/dist-packages/Markdown-2.2.0-py2.6.egg 
Searching for PyYAML==3.10 
Best match: PyYAML 3.10 
Adding PyYAML 3.10 to easy-install.pth file 

Using /usr/local/lib/python2.6/dist-packages 
Finished processing dependencies for conundrum==0.1.0 

Просто быть уверены, что это не что-то неправильно моя моя система, я скачал два пакета из GitHub с подобным setup.py и установил их. Устанавливается без проблем.

+1

Какие команды вы используете для установки и какие ошибки вы получаете? – 2013-02-14 01:02:02

+0

@Mike, это единственная ошибка, которую я получаю. Помимо этого есть несколько предупреждений. – elssar

+0

@elssar: Каковы предупреждения? И какова трассировка ошибки? Может быть, вы думаете, что ничто из этого не имеет значения, и, может быть, вы правы, но вы ошибаетесь, если бы вы точно знали, что здесь происходит, вы бы не задавали этот вопрос. Поэтому, пожалуйста, сообщите нам фактическую команду, которую вы используете, и полную выходную информацию. – abarnert

ответ

15

Я не могу запустить setup.py из другого каталога. Его нужно запустить из каталога, в котором он находится. В этом была проблема.

Исправлено.

+1

ОК. Я просто предположил, что вы знали, что 'module.py' будет' $ (pwd)/module.py', а не '$ (dirname /path/to/setup.py)/module.py'. Но это было не очень хорошее предположение. Инструменты Unix делают это гораздо чаще, чем другие, но это не то же самое, что «это может быть только так» (особенно для пользователей Windows). (BTW, то же самое верно, если вы используете относительный путь в 'package_dir' - это относительно pwd.) Считаете ли вы, что документы должны сделать это понятнее? Если это так, вы можете захотеть записать ошибку документации или привести ее в списки рассылки. – abarnert

+0

@abarnert Я знаю, где 'module.py', я просто предположил, что' setup.py' будет автоматически читать из корневого каталога и устанавливать его в текущем рабочем каталоге. Мне нужно будет внимательно прочитать документы, чтобы убедиться, что это еще не написано. Я думаю, что половина моих проблем возникает из-за моего случайного процесса чтения между линиями из нескольких источников, а затем, глядя на примеры кода, чтобы выяснить, что происходит, не понимая, что он делает. – elssar

+0

@elssar: Я не мог найти нигде, о чем прямо сказано в документах; Я думаю, что они делают одно и то же предположение. Но я, как и вы, точно не изучил их подробно. – abarnert

4

Если я правильно понимаю ваш макет, проблема в том, что вы используете по умолчанию package_dir, что означает, что модули верхнего уровня, как module должны находиться в корневом каталоге, как module.py, а не как module/module.py.

Итак, добавьте это:

package_dir = {'': 'module'} 

Теперь это будет выглядеть для module, как module/module.py.

(PS, все это было бы намного менее запутанным, если бы вы обсуждали, был ли ваш модуль или его подкаталог или, в идеале, и то, и другое), назывались чем-то иным, чем «модулем». Кроме того, если вы использовали более стандартный формат для рисования дерево каталогов.)

Это объясняется в Listing whole packages. (Я понимаю, что вы перечисляете отдельные модули, а не целые пакеты, но документы для этого раздела просто говорят «снова, вы можете переопределить соответствие пакета/каталога с помощью опции package_dir», ссылаясь на раздел, который я связал. И reference для package_dir еще менее полезно, он просто говорит «Отображение пакетов в имена каталогов».)

+2

Это не заслуживает второго ответа, но я нашел [The Hitchhiker's Guide to Packaging 1.0 - Создание пакета] (http://guide.python-distribute.org/creation.html) чтобы быть полезным как скелет для разработки структуры пакета. – 2013-02-14 01:16:42

+1

@Mike: IIRC, это руководство избегает объяснения всего сложного материала, а вместо этого объясняет, как избежать необходимости сложного материала, что означает, что он, вероятно, не будет напрямую отвечать на вопрос OP, но может легко заставить его не нуждаться в ответе больше. (И, даже если это не так, стоит прочитать.) Итак, определенно +1. – abarnert

+0

@Mike Угадайте, я должен был быть более ясным -> модуль является корневым каталогом, он имеет то же имя, что и module.py. Чтобы быть яснее - корневой каталог называется модулем и содержит скрипт python module.py и все остальное, а также подкаталог с тестами, которые мне не нужны. – elssar

Смежные вопросы