2014-01-17 4 views
3

Для структуры каталогов, подобной приведенной ниже, я не смог сделать xy импортируемым пакетом.Setup.py внутри установленного модуля

xy 
├── __init__.py 
├── z 
│   ├── __init__.py 
│   └── stuff.py 
└── setup.py 

Если setup.py были каталог, я мог бы использовать

from setuptools import setup 
setup(name='xy', 
     packages=['xy']) 

, но мало того, что, не сочетание package_dir и packages не позволил мне import xy, только import z. К сожалению, moving the setup.py директория вверх на самом деле не является вариантом из-за чрезмерного количества жестко закодированных путей.

+0

Я не уверен, что я понимаю ваш вопрос, но вы хотите импортировать xy, чтобы у вас был доступ к xy.setup? – Reti43

+0

Я пытаюсь получить доступ к 'xy.z', не обязательно' xy.setup', но я бы предположил, что 'xy.setup' будет доступен, если только он не будет явно удален. –

+0

Если вы пишете 'import z' в xy/__ init__.py, импортируя xy, у вас должен быть доступ к xy.z без дополнительной суеты. – Reti43

ответ

0

Я наткнулся на ту же проблему и не нашел подходящего решения (прочитайте «с использованием предопределенных параметров настройки»).

Я закончил тем, что сделал уродливый патч: я переместил все в новый подкаталог, названный пакетом, а затем переместил все обратно.

import os, errno 

# create directory 
directory = 'xy/' 
try: 
    os.makedirs(directory) 
except OSError as e: 
    if e.errno != errno.EEXIST: 
     raise 

# move important files 
move = [ ... ] 

for fname in move: 
    os.rename(fname, directory + fname) 

setup(
    ... 
    package_dir = {'': '.'}, 
    ... 
) 


# move back 
for fname in move: 
    os.rename(directory + fname, fname) 
Смежные вопросы