2014-01-17 67 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_dirpackages組合已經讓我import xy,只有import z。不幸的是,moving the setup.py由於硬編碼路徑的數量過多,目錄上並不是真正的選項。

+0

我不確定我理解你的問題,但是你想導入xy,所以你有權訪問xy.setup? – Reti43

+0

我打算訪問'xy.z',不一定'xy.setup',但我會推定'xy.setup'是可訪問的,除非明確地刪除了某處。 –

+0

如果你在xy/__ init__.py中寫入'import z',通過導入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)