我有一个python应用程序,我正在开发。需要使用另一个驻留在不同目录中的库。
文件布局如下所示: dir X有两个项目目录:
我想在currentProject中使用xLibrary。我一直在尝试编写代码,好像所有源代码都位于同一目录中并使用以下命令调用我的项目主脚本:
PYTHONPATH=.:../xLibrary ./current-project.py
但这不起作用。我想使用它的代码库而不安装库globaly或将其复制到我的项目目录。可能吗?如果没有,我该如何处理这个问题。
答案 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 module1
和import module2
ìncurrent-project
,则使用{{ 1}}包含文件xLibrary
和module1.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提供)