Python 使用自定义前缀安装时如何将lib目录添加到sys.path

Python 使用自定义前缀安装时如何将lib目录添加到sys.path,python,distutils,setup.py,Python,Distutils,Setup.py,我来自C语言背景,有自动工具(./configure,make,makeinstall),但最近开始使用Python。使用Autotools,我可以通过执行/configure--prefix=/foo/bar,在系统的任何位置或多或少安装一个程序。我发现大多数Python程序使用基于distutils的类似系统,通常位于名为setup.py的文件中。但是,我注意到,如果我将项目安装在非标准目录中,例如通过执行python setup.py安装--prefix/foo/bar,那么/foo/ba

我来自C语言背景,有自动工具(./configure,make,makeinstall),但最近开始使用Python。使用Autotools,我可以通过执行
/configure--prefix=/foo/bar
,在系统的任何位置或多或少安装一个程序。我发现大多数Python程序使用基于distutils的类似系统,通常位于名为setup.py的文件中。但是,我注意到,如果我将项目安装在非标准目录中,例如通过执行
python setup.py安装--prefix/foo/bar
,那么
/foo/bar/bin
中的脚本将无法获取安装到
/foo/bar/lib/pythonx.y/site packages
中的包


我假设在执行脚本时,我必须以某种方式将该目录添加到
sys.path
。如何以稳定的跨平台方式做到这一点?或者我应该做些别的吗?

如果您的自定义installdir是“foo”,那么python根是“bar”,包根是“lib” 您可以将以下内容添加到脚本中:

import sys
from os.path import join
foo = "foo"
bar = "bar"
lib = "lib"
newbase = join(foo, bar, lib)
sys.path.append(newbase)
在您的示例中:

foo ='foo'
bar = 'bar'
lib = '/lib/pythonx.y/site-packages'

另一个常用工具是使用virtualenv创建另一个不是系统范围的python存储库,并在其中安装软件包

>> pip install virtualenv
>> virtualenv --distutils test_env
>> source ./test_env/bin/activate
>> cd <your package>
>> python setup.py install
>pip安装virtualenv
>>虚拟环境——分布式测试
>>来源./test_env/bin/activate
>>光盘
>>python setup.py安装

谢谢,但我认为这不能解决问题。我事先不知道程序将安装在哪里。它可能位于文件系统中的任何位置。我必须使用相对路径,并考虑到x.y根据安装的Python版本的不同而有所不同。如果您使用的是distutils,并且不害怕弄脏您的手,您可以尝试对安装脚本进行自定义。doc部分可能很有用:还要注意,镇上的新警长似乎是pip: