利用多个python项目

时间:2010-06-08 20:13:02

标签: python

我有一个python应用程序,我正在开发。需要使用另一个驻留在不同目录中的库。

文件布局如下所示: dir X有两个项目目录:

  • 当前项目
  • xLibrary

我想在currentProject中使用xLibrary。我一直在尝试编写代码,好像所有源代码都位于同一目录中并使用以下命令调用我的项目主脚本:

PYTHONPATH=.:../xLibrary ./current-project.py

但这不起作用。我想使用它的代码库而不安装库globaly或将其复制到我的项目目录。可能吗?如果没有,我该如何处理这个问题。

5 个答案:

答案 0 :(得分:2)

将软件包隔离到实际的软件包中并将其视为一种良好的编程习惯。如果您确定要继续使用该方法,可以通过以下方式修改python中的搜索路径:

import sys
sys.path.append( "<path_containing_the_other_python_files>" )

为了避免嵌入绝对路径,可以使用os.path.abspath(__file__)获取当前正在执行的.py文件的绝对路径,并跟进一些os.path.dirname()调用以构建包含到的正确相对路径sys.path

一种略微改变的方法,可以让你充分利用这两个世界,将__init__.py文件添加到xLibrary的目录,然后将包含'xLibrary'的路径添加到{{1相反。然后,随后的Python代码可以通过sys.path“正确”导入所有内容,而不仅仅是from xLibrary import my_module,这可能会使习惯于标准包目录布局的人感到困惑。

答案 1 :(得分:2)

这取决于您使用xLibrary中的current-project

如果您在from xLibrary import module1内执行current-project之类的操作,xLibrary需要作为Python包进行布局:

xLibrary/
xLibrary/__init__.py
xLibrary/module1.py  # or whatever other modules the package consists of

在这种情况下,您应该在xLibrary中包含PYTHONPATH的父目录:

PYTHONPATH=.:.. ./current-project.py

但是,如果xLibrary只是您单独导入的Python模块的集合(即,如果您执行import module1import module2ìncurrent-project,则使用{{ 1}}包含文件xLibrarymodule1.py),您应该像在PYTHONPATH中一样包含module2.py

xLibrary

答案 2 :(得分:0)

bash$ ln -s ../xLibrary xLibrary

答案 3 :(得分:0)

首先,在PYTHONPATH变量中使用绝对路径可能更好。 其次,我认为你不需要在路径中添加当前目录。

除此之外,最好知道哪些不起作用以及错误消息是什么。 你在那里的命令行似乎缺少一个分号 试试这两个:

a=12 echo $a
b=12 ;echo $b

......你会看到差异。

答案 4 :(得分:0)

除了其他建议外,您可以考虑virtualenv包。在编写一个小的setup.py文件之后,您可以“虚拟安装”库并避免所有PYTHONPATH一般情况下的修改。

这是一个非常好的做法,受到python社区的鼓励。

否则我更喜欢使用sys.path方法(由Rakis提供)