ubuntu下Python導入自定義模塊的方法


ubuntu下Python導入自定義模塊的方法

當在python程序中導入自定義模塊時,若出現“Import Error:no module named xxx”表明系統在python的搜索路徑(PYTHONPATH)中找不到該模塊,需要把該模塊添加到python的搜索路徑中。

要用import mymodule導入自定義的模塊,其必須在python的搜索路徑中,一般有三種方法可以采用:

1.將你自定義的模塊(.py文件)放置在python的任意搜索路徑下(可以在python中輸入import sys和sys.path 查看搜索路徑)

2.修改環境變量PYTHONPATH以包含用戶自定義模塊的路徑

臨時修改:在終端輸入export PYTHONPATH=/mymodule directory:$PYTHONPATH
,利用echo $PYTHONPATH 命令可查看是否將路徑添加成功。該方法在當前終端下有效,但若關閉終端后重新打開,則會失效。
徹底修改:要想使修改始終有效,則需要修改用戶或系統的環境變量配置文件。以修改用戶的環境變量配置文件.bashrc或.profile為例(兩個文件均在用戶主目錄下/home/用戶名,.bahsrc包含專用於你的bash shell的bash信息,當登錄以及每次打開新的shell時,該文件被讀取;.profile包含專用於你的shell信息,當用戶登錄時,該文件僅僅執行一次,它設置一些環境變量,執行用戶的.bashrc文件)。cd到用戶主目錄下,打開.bashrc或.profile文件,在末尾添加一行export PYTHONPATH=/mymodule directory:$PYTHONPATH,保存退出后,執行source .bashrc 或source .profile命令使修改生效。修改系統環境變量配置文件的過程也類似,只不過相應的文件要到/etc 目錄下去找。

vi ~/.bashrc

export PYTHONPATH=$PYTHONPATH:/data/xm/jinnanbisai/project/code/Detectron/detectron/core

source ~/.bashrc


3.修改python的sys.path變量,在導入自定義模塊前,執行以下操作。此方法也只能臨時起作用,退出python下次再進來就失效了。

import sys
sys.path.append('mymodule directory')

原文:https://blog.csdn.net/Blateyang/article/details/78753051

python模塊以及導入出現ImportError: No module named 'xxx'問題---https://blog.csdn.net/damotiansheng/article/details/43916881

關於 python ImportError: No module named 的問題---https://my.oschina.net/leejun2005/blog/109679

 

python自定義模塊導入方法,文件夾,包,文件夾的區別---https://blog.csdn.net/a583179/article/details/79084195

python模塊導入,網上介紹的資料很多,方法也眾說紛紜。根據自己的實踐,感覺這個方法最簡單直接,而且可以與主流的python ide生成的工程是一樣的。

 

規則只有三條

1.      嚴格區分包和文件夾。包的定義就是包含__init__.py的文件夾。如果沒有__init__.py,那么就是普通的文件夾。

2.      導入package。  在python 安裝目錄的site-package文件夾中新建xxx.pth,內容是需要導入的package所在的文件夾路徑。

3.      導入模塊。就是一般的模塊導入寫法,注意只要包路徑,不要文件夾路徑。

 

示例:

以上面工程為例,

總共有4個包,分別是:package,package1, package2, folder2.(注意,folder1不是package,因為它沒有__init__.py)。

這些包所在的文件夾共有兩個,test以及test/folder1。  注意,package2所在的文件夾是test,雖然它是包含在folder2里面,但是folder2是一個包,不是一個文件夾。

因此在site-package中新建一個XXX.pth, 里面添加上test以及test/folder1的絕對路徑即可。

使用pth文件,在 site-packages 文件中創建 .pth文件,將模塊的路徑寫進去,一行一個路徑,以下是一個示例,pth文件也可以使用注釋:

# .pth file for the  my project(這行是注釋)
E:\DjangoWord
E:\DjangoWord\mysite
E:\DjangoWord\mysite\polls

 

模塊導入比較簡單,只要依次填包名就可以了,但注意只要包名
如果需要導入module2,則import folder2.package2.module2

如果需要導入module1,則import package1.module1   注意,路徑中沒有folder1,因為folder1是文件夾,不是包。

 

Python在不同目錄下導入模塊的方法---https://blog.csdn.net/zhili8866/article/details/52980924

 

 

Python3導入自定義模塊的3種方式---https://blog.csdn.net/pwc1996/article/details/52577148

前話
最近跟着廖雪峰的教程學到 模塊 這一節。關於如何自定義一個模塊,如果大家不懂的話還請先看下面這篇博文 ↓
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318447437605e90206e261744c08630a836851f5183000)
模塊是個好東西啊,大牛們開源共享許多模塊也加快了大家開發的速度,許多開源模塊可以在這里找到 ↓
https://pypi.python.org/pypi
因為剛入門所有有很多細節不懂,在網上搜尋資料的時候發現各位大神們的教程實在太過於精簡,讓我這個菜鳥很辛苦的才操作成功。
因此在這里記錄下來。

開始

第一種,直接 import

這里有個大前提,就是你的py執行文件和模塊同屬於同個目錄(父級目錄),如下圖:

  • main.py 和 pwcong模塊同在python目錄
  • 執行文件為main.py
  • pwcong文件夾為一個模塊

我把pwcong模塊提供的函數寫在 __init__.py 里,里面只提供一個 hi 函數:

# pwcong 模塊的 __init__.py
# -*- coding: utf-8 -*-

def hi():
    print("hi")

執行文件main.py直接import模塊:

# main.py
# -*- coding: utf-8 -*-

import pwcong

pwcong.hi()

接着我們運行一下main.py可以看到命令行窗口輸出了一句 hi ,第一種方式完成。

使用模塊方式為:先導入-》接着輸入模塊.變量|函數, 如上面例子的 pwcong.hi()

第二種,通過sys模塊導入自定義模塊的path

如果執行文件和模塊不在同一目錄,這時候直接import是找不到自定義模塊的。如下圖:

執行文件main.py在main目錄下
pwcong模塊在python目錄下

sys模塊是python內置的,因此我們導入自定義模塊的步驟如下:

先導入sys模塊
然后通過sys.path.append(path) 函數來導入自定義模塊所在的目錄
導入自定義模塊。

這時候 main.py 這樣寫:
# main.py
# -*- coding: utf-8 -*-

import sys
sys.path.append(r"C:\Users\Pwcong\Desktop\python")

import pwcong

pwcong.hi()

最后執行main.py文件,最終輸出 hi ,第二種方式完成。

 
第三種,通過pth文件找到自定義模塊
這個方法原理就是利用了系統變量,python會掃描path變量的路徑來導入模塊,可以在系統path里面添加。但是我還是推薦使用pth文件添加。
模塊和執行文件目錄結構跟上圖一樣:
  • 執行文件main.py在main目錄下
  • pwcong模塊在python目錄下

我們創建一個 module_pwcong.pth 文件,里面內容就是 pwcong模塊所在的目錄:

C:\Users\Pwcong\Desktop\python

將該 module_pwcong.pth 文件放到這里:
python安裝目錄\Python35\Lib\site-packages

例如:

 然后 main.py 導入並使用自定義模塊:

# -*- coding: utf-8 -*-

import pwcong

pwcong.hi()

最后執行 main.py 文件,可以輸出 hi ,第三種方式完成。

 結束!

 

調用文件中的包中包的模塊

cd /home/xm/anaconda3/envs/py27/lib/python2.7/site-packages
vi module_detectron.pth
編輯內容:/data/xm/jinnanbisai/project/code/Detectron

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM