2011-02-25 45 views
1

我是一個python 模塊製作新手。遵循this question的精神,我安裝了Rx來驗證來自YAML文件的一些數據。爲了讓整個聚會在一起,我簡單地把整個git樹放在site-packages之下。這爲我提供了一個(非常簡化的)樹的Python實現site-packages/Rx/python/Rx.py來自源代碼的python模塊 - 命名

由於這不能被直接導入,我添加__init__.pysite-packages/Rx,用單個行:

from Rx.python.Rx import * 

由於仍然不能直接導入,我添加__init__.pysite-packages/Rx/python,用單個行:

from Rx import * 

現在,我可以成功導入。這是偉大的,但我不在乎以下

>>> import Rx 
>>> a = Rx.Factory() 
>>> a 
<Rx.python.Rx.Factory object at 0x00C0CCF0> 

我只是想的對象軟件包名稱Rx,例如,<Rx.Factory object at 0x00C0CCF0>引用。

這是如何正確完成的?謝謝!

編輯,任何人誰可能會遇到同樣的問題:

我掏空了site-packages/Rx/python/__init__.py,並改變​​,如下:

import os 
__path__.append(os.path.join(__path__[0], 'python')) 
from Rx import * 

這不正是我想要的,但至少現在的對象是Rx.Rx.Factory

回答

0

如果在頂級Rx/python目錄中沒有代碼,您可以將其刪除並將其放入e Rx.py文件導入站點包。

如果你想保留整個git樹在一起,你可以將Rx文件從某處符號鏈接到site-packages,但是最好修改你的PYTHONPATH變量以包含包含Rx.py的目錄。

Modules上的Python文檔非常全面。絕對檢查the module search path部分。

+0

雖然它不正是我一直在尋找,它發生在帶領我的工具在那裏,所以我會給你。 – Nate 2011-02-28 12:24:36

1

一個常見的模式是設置你的項目是這樣的:

ProjectName/ 
|-- bin/ 
| `-- myscript 
|-- package_name/ 
| |-- __init__.py 
| |-- rx.py 
`-- setup.py 

你的安裝腳本則是這樣的:

#!/usr/bin/env python 

from distutils.core import setup 

setup(name='ProjectName', 
     version='1.0', 
     description='My project description', 
     author='Me', 
     author_email='[email protected]', 
     url='http://localhost/', 
     packages=['package_name'], 
    ) 

當你運行:

$ python setup.py install 

的Distutils會複製你的包目錄到網站包。

若採用該結構的進口將是這樣的:

from package_name import Rx 
print Rx.Factory 

這聽起來像你想的是:

import package_name 
print package_name.Factory 

要做到這一點,你會希望下面的添加到您的init .py:

from rx import Factory 

For development you可以象徵性地將你的軟件包目錄鏈接到站點包中,但是還有其他一些方法可以將開發代碼添加到你的PYTHONPATH中,而不需要符號鏈接。

最簡單的方法是簡單地將目錄切換到您的項目目錄(cd上的ProjectName基於上面的例子),然後從那裏執行腳本。

如果你不喜歡,你可以做喜歡的事,你的開發包附加到您的PYTHONPATH:

$ export PYTHONPATH=$PYTHONPATH:/home/me/ProjectName 

另一種方式做到這一點是使用* .pth文件,添加您的發展打包到網站包,並讓它仍然存在於你的主目錄中。要做到這一點,你只會創建一個名爲像myproject.pth其中將包括一個簡單的文件:

# pth file for Rx development 
/home/me/ProjectName 

約PTH文件的好處是,你可以四處移動你的代碼,重命名的包中,添加第二包等,它仍然是可以導入的,而不會與你的符號鏈接混淆。

當然還有其他選項,如sys.path中的操作在用戶啓動文件,像的virtualenv,擴建等

相關問題