繁体   English   中英

当他们从PyPI pip安装软件包时,从setup.py中访问用户激活的虚拟环境

[英]access the user's activated virtual environment from within setup.py when they pip install your package from PyPI

我的软件包Foo构建了一个扩展libFoo.so,它依赖于另一个软件包Bar的扩展libBar.so,而我不知道先验的依赖库libBar.so已被安装。 我需要知道依赖项的目录以便设置libFoo.so的rpath,以便它可以在运行时找到libBar.so。

我认为这样做的一个好方法可能是在我的setup.py中导入依赖包Bar并检查模块以获取目录,因为我知道libBar.so相对于Bar包目录的位置。 这样,如果它们是从虚拟环境安装的,我将找到合适的路径。

但是,当我尝试执行此操作时(即,当我激活虚拟环境并从PyPI安装我的软件包时),我发现setup.py中的import Bar最终从不同的虚拟环境中导入了一个版本(我可以通过检查安装后构建的libFoo.so的rpath)。

另一方面,如果我通过导航到源目录并执行pip install -e .在本地安装Foo软件​​包pip install -e . 激活我的虚拟环境后,rpath设置正确...

从PyPI安装时如何获得正确的行为? 如果有帮助,请参阅setup.py中的相关代码:

import Bar
barDir = os.path.dirname(inspect.getfile(Bar))

当我激活环境并从PyPI安装时,barDir是

/Users/me/anaconda/envs/WRONGENVIRONMENT/lib/python2.7/site-packages/bar

当我激活环境并在本地安装时,barDir是

/Users/me/anaconda/envs/RIGHTENVIRONMENT/lib/python2.7/site-packages/bar

我正在运行OS X 10.10.5并使用conda环境

尝试从setuptools使用pkg_resourceshttps : setuptools

就像是:

from pkg_resources import resource_string
libbar = resource_string('Bar', 'libBar.so')

事实证明这是一个愚蠢的缓存问题(pip安装没有从PyPI获取最新的软件包,而是使用了我测试过的较早版本的缓存副本)。 我必须做

pip install --no-cache-dir Foo

确保我得到的是新版本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM