在Python项目*享实用程序模块

问题描述:

在我的python项目*享实用程序模块的最佳目录结构策略是什么?由于通用模块将被更新为新函数,我不想将它们放在python安装目录中。在Python项目*享实用程序模块

project1/ 
project2/ 
sharedUtils/ 

从project1我不能使用“import .. \ sharedUtils”,有没有其他方法?我宁愿不硬编码“sharedUtils”位置提前

由于制作一个单独的独立包?并把它放在你的python安装的/ site-packages?

当谈到开发模式时,我个人也很喜欢:使用符号链接和/或*.pth文件。

+3

有趣的使用问号... – tgray 2009-11-30 13:41:45

+1

由于有很多可能性......我使用“苏格拉底方法”:试图让人们反思可能性。 – jldupont 2009-11-30 14:20:14

+2

这种方式如何处理版本控制?当你提交你的项目时,你是否也会手动进入site-packages目录并执行相同的操作? – 2009-11-30 17:21:16

假设您有sharedUtils/utils_foosharedUtils/utils_bar。 您可以编辑您的PYTHONPATH包括sharedUtils,然后使用

import utils_foo 
import utils_bar 
etc. 

在linux下将它们导入project1project2你能做到这一点可以编辑〜/ .profile中有这样的事情:

PYTHONPATH=/path/to/sharedUtils:/other/paths 
export PYTHONPATH 

使用PYTHONPATH环境变量会影响python在查找模块时搜索的目录。由于每个用户都可以设置自己的PYTHONPATH,因此该解决方案适用于个人项目。

如果希望机器上的所有用户都能够导入sharedUtils,然后 中的模块,则可以使用.pth文件来实现此目的。你把.pth文件的确切位置可能取决于你的python发行版。见 http://bob.pythonmac.org/archives/2005/02/06/using-pth-files-for-python-development/

+0

对不起,但python新增了,你会在PYTHONPATH中完整路径代码还是使用“../”? – 2009-11-30 17:23:00

+0

@iKarampa,没问题。 PYTHONPATH需要一个完整的(绝对)路径。 – unutbu 2009-11-30 17:38:03

+0

分发文件时,需要以某种方式连接一个目录中的所有实用程序,并且标准导入将正常工作。好的,我知道了! 谢谢 – 2009-12-01 09:38:15

目录结构:

project1/foo.py 
sharedUtils/bar.py 

随着目录,你已经证明他们,从foo.pyproject1目录内您可以按以下的相对路径添加到sharedUtils

import sys 
sys.path.append("../sharedUtils") 
import bar 

这可以避免硬编码C:/../sharedUtils路径,并且只要您不更改目录结构,它就会工作。