Python中使用包管理模塊,包一般對應一個目錄,必須在目錄下建立一個init.py模塊,init.py模塊的模塊名稱即爲包名,Python纔會將目錄解析爲包。python
init.py文件內能夠定義初始化包的內容,導入包的內容,限制包內模塊的導出。mysql
init.py文件能夠爲空,也能夠是一個模塊,其模塊名稱爲包名稱。sql
導入包或包的模塊、變量、函數時,init .py文件會被自動執行。shell
Python中一個.py文件就是一個模塊。服務器
Python 中用 import 或者 from...import 來導入相應的模塊。ide
將整個模塊(somemodule)導入,格式爲: import somemodule函數
從某個模塊中導入某個函數或變量,格式爲: from somemodule import somefunction工具
從某個模塊中導入多個函數,格式爲: from somemodule import firstfunc, secondfunc, thirdfunc學習
將某個模塊中的所有函數或變量導入,格式爲:from somemodule import *
開發工具
在學習過程當中有什麼不懂得能夠加個人 python學習資源qun,855-408-893 羣裏有不錯的學習視頻教程、開發工具與電子書籍。 與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容 import sys print('================Python import module==========================') print('命令行參數爲:') for i in sys.argv: print(i) print("python 路徑爲", sys.path) from sys import argv, path # 導入特定的成員 print('================python from import===================================') print(argv) print(path)
對導入的模塊進行重命名
Import package.module as name
import導入包或模塊時,若是導入模塊較多須要換行,可使用反斜槓,或是將使用小括號將包含全部的模塊。
包和模塊不會被重複導入。
模塊內部預約義了內置變量:
name :當前模塊名稱
package :當前模塊所屬包的名稱
doc :當前模塊的註釋內容
file :當前文件
# -*- coding:utf-8 -*- print("name: " + __name__) print("package: " + (__package__ or "當前模塊不屬於任何包")) print("doc: " + (__doc__ or "當前模塊沒有任何註釋")) print("file: " + __file__) # name: __main__ # package: 當前模塊不屬於任何包 # doc: 當前模塊沒有任何註釋 # file: test.py
若是某個文件被看成入口文件,內置變量package 沒有值,name 值爲main,doc ,file 值爲文件名稱(不含路徑)。
每一個模塊均可以任意寫一些沒有縮進的代碼,而且在載入時自動執行,爲了區分模塊是主執行文件仍是被調用的模塊文件,Python引入了一個變量name,當文件是被調用時,name的值爲模塊名,當文件做爲入口被執行時,name爲'main'。所以,能夠在每一個模塊中寫上測試代碼,測試代碼僅當模塊被Python直接執行時纔會運行,代碼和測試結合在一塊兒,完美實現對測試驅動開發(TDD)的支持。
if __name__ == "__main__": function_name()
將一個模塊文件做爲模塊執行而不是應用執行的命令以下:
python3 -m package.module
import只能導入包和模塊,不能直接導入變量或者函數。對於多層包嵌套後致使導入名稱過長,能夠爲其重命名。
import package1.package2.module_name import package1 import package1.module_name import package1.package2.module_name as new_name
導入包和模塊時須要避免循環導入,兩個或者多個模塊文件互相導入會報錯。
Python在導入模塊時,會執行模塊裏的全部內容,但屢次導入只會執行一次。
Import導入包或模塊時,Python 解釋器尋找模塊的優先級以下:
A、當前目錄
B、環境變量PYTHONPATH
C、sys.path(list 類型)
模塊在被導入執行時,Python解釋器爲加快程序的啓動速度,會在與模塊文件同一目錄下自動生成.pyc文件,.pyc是通過編譯後的字節碼。
Python使用縮進對齊組織代碼的執行,全部沒有縮進的代碼(非函數定義和類定義),都會在載入時自動執行。
導入某個模塊的變量,多個使用逗號分隔
from package1.package2.module_name import variable_name
導入某個模塊的函數,多個使用逗號分隔
from package1.package2.module_name import function_name
導入某個包的某個模塊,多個使用逗號分隔
from package1 import module_name
導入模塊的全部變量和函數
from package1.module_name import *
在模塊內使用內置all屬性指定本模塊能夠導出的變量或函數,外部導入只能使用指定的變量或函數。
在模塊(*.py
)中使用導出all列表裏的類、函數、變量等成員,不然將導出全部不如下劃線開頭(私有)的成員,在模塊中使用all屬性可避免在相互引用時的命名衝突。
#!/usr/bin/python3 __all__ = ["variable1", "variable2", "function_name1", "function_name2"] variable1 = 0 variable2 = 0 def function_name1(args): pass def function_name2(args): pass
在導入變量和函數時,若是變量和函數太多須要換行,則可使用反斜槓換行或是使用小括號修飾多個變量或函數。
from package1.module_name import variable1, variable2 \ variable3, function_name1 from package1.module_name import (variable1, variable2, function_name2, function_name2)
頂級包與入口文件 main.py 的位置有關,與 main.py 同級的包是頂級包,所以main.py入口文件不屬於任何包。
相對導入是導入模塊時指定被導入模塊名稱的相對路徑。
import 不支持相對導入,只能使用 from ... import ... 格式實現相對導入,
「 . .. ... 」 來表示相對路徑,一個點表示當前包,兩個點表示上一級包,以此類推。
入口文件中沒有包的概念,所以不能使用相對導入。
使用相對導入不要超出頂級包,入口文件同級的包都不能使用相對導入。
在main.py若是做爲模塊執行時,可使用相對導入,此時使用以下命令執行:
python3 -m main.py
絕對導入是導入時必須指定從頂級包到被導入模塊名稱的完整路徑,可使用import 和 from ... import ...進行導入。
init.py文件存在包的根目錄下,當包或者包中的任意模塊或模塊中變量、函數被導入時,init.py中內容會首先自動被執行。所以,init.py文件能夠實現以下應用:
A、限制本包的模塊導入
在init.py中寫入內置函數all,決定哪些模塊能夠被外部導入。
__all__ = ["module_name1", "module_name2"]
B、批量導入
若是包內多個模塊文件都須要用到某些模塊文件時,能夠在包的init.py文件中導入須要的模塊文件,而後就能夠在本包不一樣的模塊文件中直接使用導入的模塊 。
一般,Python文件結構以下:
#!/usr/bin/python3 # 模塊文檔 """ This is an example. """ # 模塊導入 import sys import os # 定義全局變量 debug = True # 定義類 class class_name: pass # 定義函數 def function_name(): pass # 主程序 if __name__ == "__main__": function_name()
一般,Python項目的目錄結構以下:
README:項目說明文檔。
bin(scripts):存放項目的可執行腳本。
project_name:存放項目的全部源代碼,程序的入口文件最好命名爲main.py。
docs: 存放項目文檔。
tests:測試代碼目錄。
extras:項目擴展部分,不屬於項目必需的部分,存放與項目相關的sample、poc,一般子目錄以下dev_example、production_example、test1_poc、test2_poc。
setup.py:項目安裝、部署、打包的腳本。
requirements.txt:存放軟件依賴的外部Python包列表。
README:項目說明文件。
LICENSE.txt:版權聲明
ChangeLog.txt:版本變動日誌記錄
AUTHORS:做者清單
INSTALL:安裝說明
MANIFEST.in:裝箱清單文件
MAKEFILE:編譯腳本
Python項目開發中,在開發需求完成並測試好後,須要發佈到正式服務器,此時會面臨環境依賴問題。Python項目可能會有多個第三方模塊包,而且可能會有版本約束問題,所以須要一個虛擬環境,在虛擬環境裏面模擬出跟服務器相同的環境。
pipenv ,全稱爲Python Development Workflow for Humans,旨在爲開發項目自動建立和管理虛擬環境並管理 Python 包,是virtualenv 和pip的合集,經過建立指定python版本的虛擬環境和安裝依賴包,提供各個項目隔離的開發環境。
對於Python3,安裝命令以下:
pip3 install pipenv
安裝結果查看:
pipenv –version
pipenv --three
pipenv -- two
pipenv --python 3.x.x
pipenv --python 2.x.x
建立虛擬環境,並指定Python版本
pipenv shell從系統環境切換到虛擬環境
pipenv install xxxx在虛擬環境安裝軟件包
exit退出虛擬環境
pipenv uninstall [module_name] 刪除Python包
pipenv --rm刪除虛擬環境
pipenv --where 列出本地工程路徑
pipenv --venv 列出虛擬環境路徑
pipenv --py 列出虛擬環境的Python可執行文件
pipenv install 建立虛擬環境
pipenv install [moduel] 安裝包
pipenv install [moduel] --dev 安裝包到開發環境
pipenv uninstall [module] 卸載包
pipenv graph 查看包依賴
pipenv lock 生成lockfile
pipenv run python [pyfile] 運行py文件
pipenv uninstall --all 卸載所有包並從Pipfile中移除
pipenv默認的Pipfile 文件中指定使用官方源鎖定依賴,會致使速度過慢,解決方案天然是更換國內源,經常使用國內源以下:
阿里雲:http://mirrors.aliyun.com/pypi/simple/
清華大學:https://pypi.tuna.tsinghua.edu.cn/simple/
中國科學技術大學:https://pypi.mirrors.ustc.edu.cn/simple/
源更換須要將Pipfile 文件中url的值替換爲國內源。
在學習過程當中有什麼不懂得能夠加個人 python學習資源qun,855-408-893 羣裏有不錯的學習視頻教程、開發工具與電子書籍。 與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容 [[source]] name = "pypi" url = "http://mirrors.aliyun.com/pypi/simple/ " verify_ssl = true [dev-packages] [packages] pymysql = "*" pymango = "*" mysql-connector = "*" mysqldb = "*" mysql-python = "*" [requires] python_version = "3.7"