我希望能够共享一个自包含的virtualenv,即确保安装的所有脚本都能够直接运行而无需设置任何内容。 例如。我在使用MySQL-python的virtualenv中安装了一个脚本。不幸的是,导入MySQLdb会查找一个共享库(libmysqlclient.so),该库被移动到我系统上的标准目录以外的地方。 有没有办法保证我的virtualenv每次有人使用它时都会找到它?
答案 0 :(得分:7)
我知道这个问题有点陈旧,但我很乐意分享我的解决方案,因为它没有通过谷歌找到它:
在deactivate ()
功能中,添加以下行:
if ! [ -z ${_OLD_LD_LIBRARY_PATH+x} ] ; then
LD_LIBRARY_PATH="$_OLD_LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
unset _OLD_LD_LIBRARY_PATH
fi
请注意,我使用了否定的-z
表达式 - PATH
和PYTHONHOME
的现有重置脚本使用-n
,如果{_OLD_LD_LIBRARY_PATH
错误地评估为false {1}}设置为空字符串。
然后,在deactivate ()
函数下方添加以下部分:
_OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
LD_LIBRARY_PATH="$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
答案 1 :(得分:3)
这可能不是最好的解决方案,但你可以破解virtualenv活动脚本来设置一些环境变量(这是我们需要使用的脚本)。 在virtualenv的安装脚本中,我添加了:
echo 'export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH' >> /path/to/virtualenv/activate
现在每次有人使用我的virtualenv时,它还包含LD_LIBRARY_PATH来查找mysql库。
我可以看到缺点:
不能与virtualenv的停用
如果您想使用标准的distutils setup.py分发您的软件包,那将无济于事。