2017-09-12 1 views
0

Je suis en train de créer un paquet d'œufs pour mon build projet python en utilisant la bibliothèque ciment (builtoncement)Python Egg ne pas charger des sous-modules dans mon projet

Ma structure de projet ressemble à ce

connector 
    README.md 
    requirements.txt 
    setup.py 
    __main.py__ 
    __init.py__ 
    lib 
     __init__.py 
     handlers 
       __init__.py 
       logging 
         __init__.py 
         LogStashHandler.py 

le contenu du __main.py__ est

import sys 
import os 
from cement.core.foundation import CementApp 
from lib.handlers.logging.LogStashHandler import LogStashHandler 
…… 


class ConnectorApp(CementApp): 


def main(): 
    log = None 
    with ConnectorApp() as app: 
     log = app.log 



if __name__ == '__main__': 
    main() 

le contenu du setup.py est

#!/usr/bin/env python 

import uuid 
from setuptools import setup 
import os 
from pip.req import parse_requirements 

def read(fname): 
    return open(os.path.join(os.path.dirname(__file__), fname)).read() 

BASE_DIR = os.path.dirname(os.path.realpath(__file__)) 
reqs_file = os.path.join(BASE_DIR, 'requirements.txt') 
install_reqs = parse_requirements(reqs_file, session=uuid.uuid1()) 

setup(
    name="connectors", 
    version="0.1", 
    author="Pradeep Mishra", 
    install_requires=["argparse", "requests", "pyyaml", "datetime", "cement"], 
    packages=['lib'], 
    long_description=read('README.md'), 
    data_files=[ ('', ['__main__.py', ])], 
    classifiers=[  
     "Programming Language :: Python :: 2.7" 
    ], 
) 

J'installe le programme à l'aide des commandes ci-dessous

python setup.py build 
python setup.py sdist 
python setup.py bdist_egg 

Lorsque je tente d'exécuter le programme en allant dans le dossier dist, je reçois l'erreur suivante:

(venv) Pradeeps-MacBook-Pro:dist pradeepmishra$ python connectors-0.1-py2.7.egg 
Traceback (most recent call last): 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main 
    "__main__", fname, loader, pkg_name) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code 
    exec code in run_globals 
    File "connectors-0.1-py2.7.egg/__main__.py", line 4, in <module> 
ImportError: No module named handlers.logging.LogStashHandler 

S'il vous plaît aider. Comment puis-je dire au constructeur d'œufs de localiser les modules et sous-modules à l'intérieur du module de lib

Répondre

0

Je l'ai trouvé moi-même. Au lieu de spécifier le paquet de premier niveau dans les paquets, j'ai passé la fonction find_packages() et cela a fonctionné comme charme.

Ma fonction de configuration ressemble à ceci maintenant #!/Usr/bin/env python

import uuid 
from setuptools import setup, find_packages 
import os 
from pip.req import parse_requirements 


def read(fname): 
    return open(os.path.join(os.path.dirname(__file__), fname)).read() 

BASE_DIR = os.path.dirname(os.path.realpath(__file__)) 
reqs_file = os.path.join(BASE_DIR, 'requirements.txt') 
install_reqs = parse_requirements(reqs_file, session=uuid.uuid1()) 

setup(
name="connectors", 
version="0.1", 
author="Pradeep Mishra", 
install_requires=["argparse", "requests", "pyyaml", "datetime", "cement"], 
packages=find_packages(), 
long_description=read('README.md'), 
data_files=[ ('', ['__main__.py', ])], 
classifiers=[  
    "Programming Language :: Python :: 2.7" 
], 

)