簡體   English   中英

將模塊放入Python搜索路徑

[英]Getting Modules Into Python Search Path

過去,為了讓我在python中使用/導入我自己的自定義軟件包,我要做的就是編輯.bash_profile,以便將它們附加到我的$ PATH環境變量中。

>> echo $PATH
/Users/MYNAME/google-cloud-sdk/bin:/Users/MYNAME/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/Users/MYNAME/Documents/Python_Programs/MYPACKAGE1:/Users/MYNAME/Documents/GitRepos/MYPACKAGE2

如您所見,我的路徑變量包含MYPACKAGE1和MYPACKAGE2。 前者實際上只是一個包含單個.py文件的文件夾。 后者遵循常規的包裝夾結構。

要注意的一件事是我的PYTHONPATH顯然是空的

>> echo $PYTHONPATH

>>

但是如果在python中,我查看sys.path

>> import sys
>> sys.path
['',
 '/Users/MYNAME/anaconda/bin',
 '/Users/MYNAME/anaconda/lib/python36.zip',
 '/Users/MYNAME/anaconda/lib/python3.6',
 '/Users/MYNAME/anaconda/lib/python3.6/lib-dynload',
 '/Users/MYNAME/anaconda/lib/python3.6/site-packages',
 '/Users/MYNAME/Documents/Python_Programs/MYPACKAGE1',
 '/Users/MYNAME/Documents/GitRepos/MYPACKAGE2',
 '/Users/MYNAME/anaconda/lib/python3.6/site-packages/Sphinx-1.5.6-py3.6.egg',
 '/Users/MYNAME/anaconda/lib/python3.6/site-packages/aeosa',
 '/Users/MYNAME/anaconda/lib/python3.6/site-packages/IPython/extensions',
 '/Users/MYNAME/.ipython']

太好了,從任何一個包導入都沒問題。

所以我制作了第三個與MYPACKAGE2具有相同結構的包裝

MYPACKAGE3/
    bin/
    README.md
    CHANGES.txt
    setup.py
    MANIFEST.IN
    my_module/
        __init__.py
        sub_module1.py
        sub_module2.py

將其添加到我的路徑

>> echo $PATH
/Users/MYNAME/google-cloud-sdk/bin:/Users/MYNAME/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/Users/MYNAME/Documents/Python_Programs/MYPACKAGE1:/Users/MYNAME/Documents/GitRepos/MYPACKAGE2:/Users/MYNAME/Documents/GitRepos/MYPACKAGE3

但是由於某種原因,我無法在python中導入它,並且不在我的sys.path中(sys.path與以前完全相同)。

>> import my_module
ModuleNotFoundError: No module named 'my_module'

我不知道發生了什么變化。 我想念什么?

提前致謝。

您的回聲$ PATH有

"Users/MYNAME/Documents/GitRepos/MYPACKAGE3" 

並不是

"/Users/MYNAME/Documents/GitRepos/MYPACKAGE3". 

看起來您在一開始就錯過了“ /”。

要將自定義路徑添加到sys.path:

import sys
sys.path.append("/Users/MYNAME/Documents/GitRepos/MYPACKAGE3/")

或以BASH形式:

-bash-4.1$export PYTHONPATH="${PYTHONPATH}:/Users/MYNAME/Documents/GitRepos/MYPACKAGE3/"

然后嘗試導入您的模塊。

答案是我的$PATH變量與它無關。 為了澄清,我使用的是python 3.6,因此在2.7中可能有所不同。

原來我的anaconda /.../ site-packages目錄中有一個.pth文件,我必須很久以前創建過。 看起來sys.path不僅會被... / site-packages目錄填充,而且還會被該目錄中任何.pth文件中列出的所有目錄.pth (或者看起來像sys.path中的任何目錄一樣)包裝指南 )。

Python文件布局

Python安裝在模塊目錄中有一個site-packages目錄。 該目錄是放置用戶安裝的軟件包的位置。 維護此目錄中的.pth文件,其中包含指向安裝了附加軟件包的目錄的路徑。

我知道這個問題有些深奧-但希望它能幫助其他散布語言的人理解進口制度。

暫無
暫無

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

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