2011-02-25 46 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,扩建等

相关问题