簡體   English   中英

Python sys.path 與導入

[英]Python sys.path vs import

我想了解的是什么是好的/壞的做法,以及為什么在進口方面。 我想了解的是社群對此事的一致看法,如果在某些 PEP 文件或類似文件中有任何此類看法。

我通常看到的是人們有一個 python 環境,使用 conda/pip 來安裝包,所有需要在代碼中做的就是使用“import X”(和變體)。 在我目前的理解中,這是做事的正確方法。

然而,每當 python 在我的公司與 C++ 交互時,它總是最終需要使用 sys.path 和絕對導入(但我們有一些標准化的路徑用作“基礎”,並且通常基於這些定義相對路徑)。

主要有2種情況:

  1. C++ 庫的 Python 包裝器 (pybind/ctype/etc) - 在這種情況下,用戶 python 代碼必須使用 sys.path 來指定要導入的 C++ 庫的位置。
  2. 在 python 和 C++ 之間建立通信的項目(比如 C++ 服務器、python 客戶端、TCP 連接和兩者之間的 flatbuffer 序列化)——這里 python 代碼與 C++ 代碼一起存在,如果它某些 python 文件最終使用 sys.path從同一個項目中導入 python 模塊,但它們位於不同的目錄中 - 本質上,我們通過 C++ 部署過程將 python 與 C++ 一起部署。

我不完全確定我們是否可以為案例 #1 做一些更好的事情,但案例 #2 似乎完全沒有必要,並且基本上只是因為選擇不通過 python 包管理器部署 python 代碼而被迫。 選擇最終迫使我們在庫和用戶代碼上使用 sys.path。

這對我來說似乎很糟糕,因為基本上這種做事方式不允許我們完全管理我們的 python 環境(因為我們有一些我們導入的庫,甚至認為它們沒有在技術上安裝在環境中),這可能就是原因我對使用 sys.path 進行導入持否定態度。 但我需要確定我是否正確,如果是,我需要一些官方(或幾乎)文件來支持我的案例,如果我要對我們的程序提出修正建議。

對於您的場景 2,我的理解是您在一個地方有一些 C++ 和隨附的 python,並且一個單獨的 python 項目想要導入該 python。

您能否將導入的 python 構建為一個包並使用pip install path/to/package將其安裝到您的環境中? 如果它是一個您將繼續編輯的包,您可以將-e標志添加到pip install以便在包更改時您的導入獲取最新代碼。

暫無
暫無

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

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