簡體   English   中英

使用環境變量將包路徑添加到python .pth文件

[英]Add package path to python .pth file using environment variables

是否可以使用環境變量在python .pth文件中指定庫路徑,如果可以,怎么辦?

背景 :我的python項目(位於/ path / to / my / project中)在virtualenv中運行,但需要使用外部(但本地)包。 不能將virtualenv與--sytem-site-packages一起使用,因此,我按照此答案的建議通過.pth文件將路徑添加到外部軟件包。 .pth位於/path/to/my/project/lib/python2.7/site-packages中,僅包含以下行:

/path/to/external_dir/etc/python

這按預期工作,並允許我導入外部庫。

為了在另一台計算機上使用我的項目,我想在路徑中使用環境變量,而不是絕對路徑。 我可以確定在啟動python之前,將環境變量EXTERNAL_DIR設置如下:

export EXTERNAL_DIR="/path/to/external_dir"

但是,如果將.pth文件中的/ path / to / external_dir替換為$ {EXTERNAL_DIR},則會出現導入錯誤。 .pth文件的內容如下所示:

${EXTERNAL_DIR}/etc/python

這是否僅僅是使用環境變量的正確方法,還是根本無法在.pth文件中使用它們?

我正在使用Debian,bash和python 2.7。

我認為,按照您的建議,不可能直接在.pth文件中引用環境變量。 site對這些文件的可接受的格式(Python文檔23 )。

可以根據需要使用環境變量,但是可以使用其中提到的.pth文件的有趣屬性:

執行從導入開始的行(后跟空格或制表符)。

這種行為可以巧妙的和可能有危險的方式來利用,有任意Python代碼EXECUTE AS路徑構造的一部分(見格雷厄姆鄧普爾頓的優秀崗位在這里獲得更多關於這一點)。

要通過環境變量支持路徑配置,請創建具有以下內容的.pth文件:

import os, sys; dir = os.getenv('EXTERNAL_DIR'); dir and sys.path.append(dir)

這將適用於Python 2和3; 僅當代碼可以單行表示時, import技巧才起作用。

如果定義了環境變量,此代碼會將EXTERNAL_DIR的值附加到sys.path否則將不執行任何操作。

# Create the .pth file.
$ echo "import os, sys; dir = os.getenv('EXTERNAL_DIR'); dir and sys.path.append(dir)" > /path/to/python/site-packages/extra.pth

# With no environment var, file does nothing:
$ python -c 'import sys; print(sys.path)[-1]'
/path/to/python/site-packages

# With environment variable, EXTERNAL_DIR gets added to end of path:
$ EXTERNAL_DIR=/foo/bar python -c 'import sys; print(sys.path)[-1]'
/foo/bar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM