[英]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_resources
: https : 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.