2013-02-14 6 views
14

Bu benim kullandığım denedim benim setup.py dosyaPython modülü

#!/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', 
     ], 
) 

olduğunu yüklenmez hem setuptools ve distutils, ama bu benim modülü yüklenmez. Onun yerine

file module.py (for module module) not found 

Bu

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

Daha açıkçası benim dizin yapısı olduğunu olsun, modül kök dizinidir.

Neyi yanlış yaptığımı söyleyen var mı? Ben

[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 

Sadece yanlış bir şey benim benim sistem olmadığından emin olmak için yüklemeye çalıştığınızda

Bu

çıktı, ben de benzer setup.py ile github gelen iki paket indirilen ve onları yüklü. Herhangi bir sorun olmadan yüklendi. Ben senin düzenini anlamak

+1

Yüklemek için hangi komutları kullanıyorsunuz ve hangi hataları alıyorsunuz? –

+0

@Mike, aldığım tek hata bu. Bunun dışında birkaç uyarı var. – elssar

+0

@elssar: Uyarılar nelerdir? Ve hatadaki geri dönüş nedir? Belki de bunların hiçbirinin konuyla ilgili olduğunu düşünmüyorsunuz, belki de haklısınızdır, fakat yanılıyor olabilirsiniz - eğer burada neler olduğunu tam olarak bildiysen, bu soruyu sormazdınız. Öyleyse lütfen bize çalıştırdığınız gerçek komutu ve tam çıkışı verin. – abarnert

cevap

15

Farklı bir dizinden setup.py çalıştırılamıyor. İçinde bulunduğu dizinden çalıştırılmalı. Buradaki sorun buydu.

Düzeltildi.

+1

Tamam. Modül.py'nin '$ (pwd)/module.py',' $ (dirname /path/to/setup.py)/module.py' değil olduğunu bildiğinizi düşündüm. Ama bu çok iyi bir varsayım değildi. Unix araçları bunu diğer yoldan çok daha sık yapar, ancak bu "sadece bu şekilde olabilir" ile aynı değildir (özellikle Windows kullanıcıları için). (BTW, paket_dizini kullanarak göreceli bir yol kullanırsanız aynı şey doğrudur - pwd'ye göredir.) Dokümanların bunu daha açık hale getirmesi gerektiğini düşünüyor musunuz? Öyleyse, bir dokümantasyon hatası dosyalamak veya posta listelerinde getirmek isteyebilirsiniz. – abarnert

+0

@abarnert 'module.py' nin nerede olduğunu biliyorum, sadece' setup.py''in kök dizininden otomatik olarak okuyacağını ve mevcut çalışma dizinine kurduğunu varsaydım. Dokümanları bir daha yazılmamış mı diye görmek için dikkatli bir şekilde tekrar okumalıyım. Sanırım problemlerin yarısı, birden fazla kaynaktan gelen satırlar arasında okuma yazma sürecimin bir sonucu olarak ve daha sonra ne olduğunu anlamadan ne olduğunu anlayabilmek için kod örneklerine bakıyor. – elssar

+0

@elssar: Belli bir şekilde dokümanlar içinde söylenen herhangi bir yeri bulamadım; Sanırım yaptığım aynı varsayımı yapıyorlar. Ama ben, senin gibi, ayrıntılı incelemede onları tam olarak görmedim. – abarnert

4

, sorun module gibi üst düzey modülleri değil module/module.py olarak, module.py olarak kök dizinde olması gerektiği anlamına gelir varsayılan package_dir, kullandığınız olmasıdır.

Yani, bu ekleyin:

package_dir = {'': 'module'} 

Şimdi, module/module.py olarak module için bakacağız.

(PS, modülünüzün veya alt dizininizin veya ideal olarak her ikisinin de "modül" den başka bir şey çağrılsaydı, bu durumun tartışılması çok daha az kafa karıştırıcı olurdu. Ayrıca, çizim yapmak için daha standart bir biçim kullanmışsanız dizin ağacı.)

Bu, Listing whole packages'da açıklanmıştır. (Paketlerin tamamını değil, tek tek modülleri listelediğinizi farkettim, ancak bu bölümdeki dokümanlar sadece "tekrar, paket_dizini kullanarak paket/dizin yazışmasını geçersiz kılabilirsiniz", bağlandığım bölümden bahsediyorum ve referencepackage_dir için daha az yararlıdır, yalnızca "paketin dizin adlarına eşlemesi" yazıyor.)

+2

güncellenmiş –

+1

@ Mike: IIRC, o kılavuz karmaşık şeyler her açıklayan önler ve bunun yerine gerek oluşmaması açıklar karmaşık şeyler-muhtemelen doğrudan OP'ın soruya cevap anlamına gelir, ancak kolayca cevap gerekmez ona yol açabilir artık. (Ve olmasa bile, okumaya değer.) Yani, kesinlikle + 1. – abarnert

+0

@Mike Guess Daha net olmalıydım -> modül root dizini, module.py ile aynı ada sahip. Daha açık olmak gerekirse - kök dizini modül olarak adlandırılır ve python script module.py ve diğer her şey ile testlere sahip olmayan bir alt dizini içerir. __ – elssar