簡體   English   中英

我應該把我自己的 python 模塊放在哪里,以便它可以被導入

[英]Where should I put my own python module so that it can be imported

我在 python 中有自己的包,我經常使用它。 什么是最優雅或最傳統的目錄,我應該把我的包放在哪個目錄中,以便在不使用 PYTHONPATH 或 sys.path 的情況下導入它?

例如,站點包怎么樣? /usr/lib/python2.7/site-packages
在 python 中復制和粘貼包是否常見?

我通常將我想要准備導入的東西放在用戶站點目錄中:

~/.local/lib/pythonX.X/site-packages

要為您的平台顯示正確的目錄,您可以使用python -m site --user-site


編輯:創建后它將顯示在sys.path

mkdir -p "`python -m site --user-site`"

因此,如果您像我這樣的新手並且您的目錄組織得不是很好,您可能想嘗試這種方法。

打開你的python終端。 導入一個您知道有效的模塊,例如在我的情況下 numpy 並執行以下操作。 Import numpy

numpy.__file__

這導致

'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages/numpy/__init__.py'

numpy.__file__的結果是你應該把 python 文件和你的模塊放在一起的位置(不包括numpy/__init__.py )所以對我來說就是

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages

為此,只需轉到您的終端並輸入

mv "location of your module" "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages"

現在您應該可以導入您的模塊了。

這對我有用(我必須經常創建上傳到私有 pip 存儲庫的 python 包)。 詳細說明@joran 對這個問題的評論。

  1. 創建一個“構建目錄”,用作創建包的工作區。 您選擇的任何目錄都可以
  2. 在那里復制你的 python 包目錄,並創建一個 setup.py 文件。 應該有助於正確創建 setup.py。
  3. 為您正在處理的項目創建一個virtualenv virtualenvs 有很多其他好處,我不會在這里詳細介紹。
  4. 創建本地 dist 包python setup.py sdist --format=tar 理想情況下,創建的包應該在dist文件夾中。
  5. 在您的 virtualenv 上安裝該軟件包(激活它后)。 pip install <yourpackage>.tar

如果您需要更多地使用庫並重新創建 dist 包,則可以使用pip install --force-reinstall

我發現這種方法對我很有用。 如果您不需要打包模塊以供其他系統使用而不僅僅是您的本地系統,則此方法可能有點矯枉過正

快樂的黑客。

在我的 Mac 上,我做了一個sudo find / -name "site-packages" 這給了我一些路徑,如/Library/Python/2.6/site-packages/Library/Python/2.7/site-packages/opt/X11/lib/python2.6/site-packages

所以,如果我使用的是 v2.7 或 v2.6,我知道把我的模塊放在哪里。

希望能幫助到你。

可以通過添加以下源代碼來提取導入文件夾:

import sys
print sys.path

自動符號鏈接生成示例是:

ln -s \`pip show em | grep "Location"| cut -d " " -f2\` \`python -m site --user-site\`

而不是“em”,你可以使用你“剛剛安裝但python看不到它”的其他包

下面我將根據評論中的要求進行更詳細的解釋。

假設您已經使用以下命令安裝了 python 模塊 em 或 pyserial (示例適用於 ubuntu):

sudo pip install pyserial

輸出是這樣的:

Collecting pyserial
  Downloading pyserial-3.3-py2.py3-none-any.whl (189kB)
    100% |████████████████████████████████| 194kB 2.3MB/s 
Installing collected packages: pyserial
Successfully installed pyserial-3.3

問題如下——python 看不到 pyserial 模塊,為什么? 因為安裝模塊的位置不是 python 正在查找您的特定用戶帳戶的位置。

解決方案 - 我們必須從 pyserial 到達的路徑到您的 python 正在尋找的路徑創建符號鏈接。

符號鏈接創建命令將是:

ln -s <what_to_link> <where_to_link>

我們不是輸入確切的位置,而是要求 pip 通過執行命令告訴我們它存儲模塊的位置:

pip show pyserial | grep "Location"| cut -d " " -f2

我們不是輸入確切的位置,而是要求 python 通過執行命令告訴我們它在哪里查找正在安裝的模塊:

python -m site --user-site

兩個命令都必須用“`”字符轉義(通常在美式鍵盤的 1 按鈕的左側)

結果將為 ln 提供以下命令,並創建缺少的符號鏈接:

ln -s /usr/local/lib/python2.7/dist-packages /home/<your_username>/.local/lib/python2.7/site-packages 

或類似的東西,取決於你的發行版和 python/pip 默認值。

如果你正在開發一個模塊,我建議你遵循這個。

import sys
sys.path.append("/home/mylinux/python-packages")

現在你保存在python-packages任何模塊都可以被Python-interpreter導入。

暫無
暫無

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

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