2017-07-24 2 views
0

Je souhaite utiliser un setup.py qui importe à partir d'un script qui fait partie du package à installer. Ce script contient uniquement un dict qui contient les chaînes permettant de créer des points d'entrée. Je ne les ai pas codé en dur dans le setup.py parce que je veux utiliser cette liste plus tard à partir du paquet installé.Importer un script à partir d'un package dans le fichier setup.py

Juste pour ma garde ici structure des répertoires et des fichiers importants:

PackageA 
|_package_a 
| |_models 
| |_modules 
| | |_do_query.py 
| | |_... 
| |_setup_cfg.py 
| |_ __init__.py 
| |_... 
|_ __init__.py 
|_setup.py 

__init__.py dans package_a:

from .setup_cfg import setup_config 

setup_cfg.py:

setup_config = { 
    'scripts': [ 
     'do_query' 
    ] 
} 

setup.py:

# -*- coding: utf-8 -*- 

from setuptools import setup, find_packages 
from .package_a import setup_config 

with open('README.rst') as f: 
    readme = f.read() 

with open('LICENSE') as f: 
    license = f.read() 

setup(
    ..., 
    entry_points={ 
     'console_scripts': ['{}=package_a.modules.{}:main'.format(script, script) for script in setup_config.get('scripts')] 
    }, 
) 

je peux faire l'importation from .package_a import setup_config et PyCharm résout cette importation correctement. Cependant, si je tente d'installer le paquet via pip3 install . il échoue avec ModuleNotFoundError: No module named '__main__.package_a'; '__main__' is not a package (nous utilisons pip au lieu de python setup.py install que nous voulons avoir l'ensemble dossier source installée dans le site-packages au lieu d'une version embarquée)

Quelqu'un peut-il expliquer moi cette exception ou fournir un moyen approprié pour réaliser une telle configuration? (Le dict en setup_config.py doit être accesible de setup.py et lors de l'importation du paquet installé.

+0

vous essayez d'importer tout '' 'depuis le répertoire. vous pouvez utiliser cette méthode d'importation dans un fichier uniquement. c'est-à-dire que vous pouvez utiliser 'from .package_a.modules._do_query import *' – Gahan

+0

Désolé, déjà corrigé celui-ci mais posté incorrect. Je l'ai corrigé. Même exception quand même. – Igle

Répondre

0

Je face au même problème, et aussi a résolu de manière très étrange, je ne sais vraiment pas la raison pour laquelle il travaille, même Je pensais que ce ne devrait pas fonctionner

i juste d'importer sans chemin relatif

par exemple:.

from package_a import setup_config 

juste enlevé le chemin relatif (point enlevé), cela a fonctionné. pycharm est erreur de lancement, mais quand il a couru pip3 install . cela a fonctionné. s'il vous plaît laissez-moi savoir si cela fonctionne pour vous.