2015-04-01 104 views
3

我一直在研究一個python包,現在我想將它變成一個小的RPM包。包包含幾個模塊,其中一個是可執行的。我可以用python setup.py bdist_rpm創建RPM包,並將其安裝在帶有rpm的fedora盒上。軟件包導入創建了一個模塊,子模塊仍然可導入

在這一點上有所需的命令myscript它的作品就像一個魅力。但是當我嘗試在ipython中導入包時,我遇到了一些奇怪的事情。我可以做以下

from myscript import sdf 
import myscript.mol2 

兩個工作完美,但

import myscript 
myscript.sdf 

拋出

AttributeError: 'module' object has no attribute 'sdf' 

我一直在這工作了一段時間,現在也沒有用。有很多關於進口問題的問題,但我還沒有找到答案。

我應該改變以使其工作?

當前文件夾結構爲:

myscript/ #project root 
    setup.py 
    src/ 
    myscript/ 
     __init__.py 
     functions.py 
     sdf.py 
     mol2.py 
     runner.py 
    bin/ 
    myscript #symbolic link to src/myscript/runner.py 

setup.py是:

from distutils.core import setup 
setup(name = 'myscript', 
     version = '0.75', 
     author ='me', 
     requires = ['numpy'], 
     packages = ['myscript'], 
     package_dir = {'myscript':'src/myscript'}, 
     scripts = ['bin/myscript'] 
    ) 

__init__.py是:

__all__ = ['functions','sdf','mol2','runner'] 

回答

1

This is normal behavior.如果你想導入的子模塊,那麼你必須將它們導入mo中獨樂。

# myscript/__init__.py 

from . import sdf 
+0

我也這麼認爲,但安裝rpm後,'import myscript'會拋出'ImportError:無法導入名稱sdf'。該腳本崩潰到相同的錯誤。 – Pelanthoris 2015-04-07 17:02:15

+0

我的不好,錯誤是因爲我沒有把'sdf.py'添加到我的git倉庫中,從那裏我已經把項目拉出來了。所以沒有'sdf.py'來導入。 – Pelanthoris 2015-04-07 17:28:52