精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

六個步驟,封裝你喜愛的Python代碼包

開發 后端
假設你很喜歡用同一段Python代碼,里面有幾個相關的小型函數,或者是含有幾百行代碼的中型模塊。程序員可能會把它復制到不同的項目或存儲庫中,或者從特別設置的實用工具代碼文件夾中導入這段代碼。

 假設你很喜歡用同一段Python代碼,里面有幾個相關的小型函數,或者是含有幾百行代碼的中型模塊。程序員可能會把它復制到不同的項目或存儲庫中,或者從特別設置的實用工具代碼文件夾中導入這段代碼。

[[278378]]

這很正常。程序員在編寫代碼的過程中都會不斷積累這些個性化的小工具。相比其他編程語言來說,Python更容易積累這些語句——這些代碼非常實用。

如果無需復制,就可以輕松導入自己開發的小工具,并進行更新和維護,豈不是更好嗎?如果不依賴于特定的文件或路徑,讓這些代碼在不同的環境、機器和語境中都適用?如果可以將這些個性化工具版本化,并使相關代碼清楚地反映出其依賴性呢?如果這個工具能為大眾所用呢?

沒錯,它都可以做到。

當然,這個概念不是第一次提了。這就是通常在編程語言中使用模塊、包和庫的原因,特別是在Python的開發環境中。它的實現可使Python功能更加強大;只需簡單的pip install 和 import就能獲得BeautifulSoup的html解析功能或pandas的數據幀處理功能。

另外,人人都可以將自己的代碼在PyPI上編寫和發布(PyPI是Python包的官方索引:http://pypi.python.org/pypi),使它們與sklearn、requests或delorean(都是非常實用、流行的Python包)一樣簡單易得。以下是它的幾點優勢:

  • 即使只有很少人使用,共享自己的代碼仍是一件很有趣的事;程序員可以在工作、社群活動或求職面試中分享并展示自己的勞動成果。
  • 通過強制性地整理和記錄代碼,公開給同行進行評價,從而改進代碼。
  • 它還能彌補社群的不足。你會驚訝地發現,很多人會注意到你的序列化十分高效,比如將HTTP報頭序列化到JSON。或者發現自己創建的用來驗證輸入MongoDB查詢文檔修飾符的工具有多么實用。

心動了嗎?忘記那個舊的Python模塊,開始制作小型Python包吧。

 

圖1: Python dust

 

步驟一:命名

首先是命名。好的名字通常比較簡短,便于在pip install 或 import 完成之后輸入(盡管現在已經出現了“自動輸入”);還要包含足夠的信息便于理解,或者在安裝完成后之后提示其中的內容。

requests負責處理HTTP請求、delorean負責日期和時間,sklearn負責提供機器學習框架,這些都是很好的例子。在為pandas管道包(由于pandas 通常以pd這樣較短別名導入,故使用pdpipe:https://github.com/shaypal5/pdpipe)和緩存包(cachier:https://github.com/shaypal5/cachier)命名時,筆者也嘗試過這些例子。

不過老實說,這些并不是固守的規則。流行的Python包都有pandas、 keras、 django、 boto、 jinja、 flask 和 pytorch等名稱,大家能記住這些名字,所以讀者也可以使用任何簡短且可讀的名稱(例如,由于可讀性問題,筆者將“Scikit-Learn Wrappers for FastText”縮寫成了skift)。本文以chocobo為例。

步驟二:確定代碼包的基本結構

接下來,通過幾個簡短的步驟,制作一種通用的結構:

1.用代碼包的準確名稱創建一個Github存儲庫,不要使用駝峰式或過多的個人發揮。然后在本地進行復制。

2.在該存儲庫中新建一個文件夾,用代碼包的準確名稱命名;這就是保存代碼包的文件夾。這是一種規范,只需記住外部的chocobo 文件夾(在本例中)就是存儲庫的文件夾,而內部的chocobo 文件夾是包的文件夾。

3.將自己的模塊和涉及到的任何其他模塊放在內部的chocobo文件夾中。如果存在缺失的部分,請添加__init__.py 文件。

4.將用戶直接調用的重要對象(通常是函數)從各自的模塊中導入至__init__.py文件。有了代碼包的命名空間,就可以使用這些函數、分類和變量了。如果愿意,也可以使用代碼包的API。

5.雖然不是強制規定,筆者強烈建議在代碼包或在存儲庫的根目錄中都應包含一個 .gitignore 文件。

示例:https://github.com/github/gitignore/blob/master/Python.gitignore

現在有了一個結構,可以添加不同類型的文件組成代碼包;內部文件夾保存的是包的代碼,外部文件夾保存的是輔助包文件和其他與存儲庫相關的文件。

因此,初始模塊chocobo.py如下所示:

  1. """My chocobo cooking script.""" 
  2. import os 
  3. def chocobo_roast(num_guests, hotness_level): 
  4.  # amazing python code here 

新建存儲庫文件夾如下所示:

  1. chocobo/ 
  2.  chocobo/ 
  3.  __init__.py 
  4.  chocobo.py 
  5.  .gitignore 

__init__.py 文件應如下所示:

  1. """chocobo is a python package for delicious Chocobo recipes.""" 
  2. from .chocobo import ( 
  3.  chocobo_roast, 

那么在完成封裝之后,chocobo包可以有這樣的使用方法:

  1. """I'm a script or a different package using chocobo.""" 
  2. import chococbo 
  3. def my_feast(num_guests): 
  4.  snacks = bobbish() 
  5.  main_course = chocobo.chocobo_roast(num_guests, 0) 
  6.  dressing = szechuan_chicken_mcnugget_sauce() 

以上就是一些要點。

步驟三:許可問題

使用共享許可發布代碼是較為可取的;如果要將自己的代碼公開分享,程序員會想要在保留版權的前提下得到重用代碼的許可,或者讓那些擴展自己代碼的人保證衍生代碼可以自由使用。獲得許可能輕松解決這些問題。

對于無足輕重的小項目,可以考慮MIT許可(https://choosealicense.com/licenses/mit/)。choosealicense.com(https://choosealicense.com/)提供了很多GitHub和開源社區中的實用建議。

無論選擇哪種許可,都比根本不用要好。很多時候,在沒有許可的情況下公開代碼還不如不公開;如果程序員不明確自己對代碼的所有權,大多數公司會因為可能造成的法律糾紛而放棄,從而失去許多潛在用戶。

選擇許可后,在存儲庫中創建LICENSE許可文件(不需要文件擴展名),并導入所選許可的確切文本。

步驟四:安裝文件

現在創建Python封裝工具所需的基本文件(以setuptools為例);setup.py.setup.py 包含了構建和發行時使用的實際指令。

下面是一個初始模板(別擔心,稍后會進行詳細檢查)

  1. """Setup for the chocobo package.""" 
  2. import setuptools 
  3. with open('README.md'as f: 
  4.  README = f.read() 
  5. setuptools.setup( 
  6.  author="Shay Palachy"
  7.  author_email="shay.palachy@gmail.com"
  8.  name='chocobo'
  9.  license="MIT"
  10.  description='chocobo is a python package for delicious chocobo recipes.'
  11.  version='v0.0.3'
  12.  long_description=README, 
  13.  url='https://github.com/shaypal5/chocobo'
  14.  packages=setuptools.find_packages(), 
  15.  python_requires=">=3.5"
  16.  install_requires=['requests'], 
  17.  classifiers=[ 
  18.  # Trove classifiers 
  19.  # (https://pypi.python.org/pypi?%3Aaction=list_classifiers) 
  20.  'Development Status :: 4 - Beta'
  21.  'License :: OSI Approved :: MIT License'
  22.  'Programming Language :: Python'
  23.  'Programming Language :: Python :: 3.5'
  24.  'Programming Language :: Python :: 3.6'
  25.  'Topic :: Software Development :: Libraries'
  26.  'Topic :: Software Development :: Libraries :: Python Modules'
  27.  'Intended Audience :: Developers'
  28.  ], 

首先,導入setuptools。這是一個非常有用代碼包,可輕松對Python包進行發行,即使它不包括在標準庫中(類似的distutils是比不了的),它仍然是當今Python包發行的標準,應該牢記于心。本文只使用了setuptools包中的兩個函數:setup和find_packagges。

在導入setuptools之后,調用setup()函數之前,只需將README.md 文件的內容讀入到全局變量 README中即可。

然后只需通過以下變量調用setuptools.setup() 函數即可:

  • author:輸入姓名。
  • author_email:輸入郵箱。
  • name:代碼包的名稱,在本例中為“chocobo”。
  • license:在本例中為字符串“MIT”,或選擇其他許可證。
  • description:代碼包的簡短介紹,控制在一行以內。例如:“chocobo代碼包是制作美味chocobo的食譜”
  • version:表示封裝的當前版本的字符串。筆者在之后的文章中會介紹更簡潔的處理方法,但是目前,只需要在想要發布新版本時手動增加一個數字就可以了。通常的做法是將版本號前加入字母V,因此v1是第一個版本的版本字符串,但筆者建議將v0.0.1 視為等效版本字符串并使用此格式。后文將詳細介紹這種做法的意義。
  • long_description:表示README的內容。該部分是代碼包的詳細描述。也就是該頁面PyPI的內容(示例:https://pypi.org/project/pdpipe/)。
  • url:可鏈接到代碼包的主頁。如果讀者沒有專用的站點,那么存儲庫的URL是一個不錯的選擇。
  • packages: 又一次提到了setuptools!根據命令,這個參數獲取要生成和發行/安裝的所有代碼包的名稱數組。從技術上講,可以直接使用[“chocobo”]這個名字,但是最好是將其通用化,并使用setuptools 函數,它能處理更復雜的包和存儲庫結構。有兩個可選參數可以作為輸入數據,where 和exclude,但在這里忽略不計。作為結果,where可鏈接至安裝文件所在的目錄,包括所有子目錄,一般來說這樣已經足夠了。
  • python_requires: 如果你的電腦支持Python的所有版本,就不必顧及此參數。如果不能,應該選擇一個適當的值。從技術上講,筆者不贊成使用未經測試的版本,但保險期間目前我們可以進行適當的假設:

(1) 如果讀者正在使用Python2,特別是Python2.7版本,可以得出以下兩點結論:(a)你獨樹一幟,十分優秀(b)你的電腦配置只需支持Python2.7即可,所以可以使用“>=2.7”這個字符來編輯這個參數。另外,時代在進步,試試Python3吧。

(2) 如果讀者使用的是Python3,那么任何Python版本都大于或等于用來開發代碼包的版本。以此類推,如果使用的是Python3.5,那么應該設置成“>=3.5”。

  • install_requires: 此處列出的是所有非標準庫代碼包的使用前提。例如,如果chocobo 需要requests和 pytz 才能運行的話,那么該參數應設置為:[“ requests”,“pytz”]。
  • classifiers: 連同其他成千上萬個代碼包一起,你的代碼包也會很快PyPI上線。為了進行區分,作者可以向PyPI提供一個列表,列出trove分類器來對每個版本進行分類,描述其用途、支持的系統和開發進度。然后,社區成員可以使用這些標準化的分類器,根據自己的需求來查找項目(盡管不確定誰會進行這項操作)。

這里有所有可能用到的分類器:https://pypi.python.org/pypi?%3Aaction=list_classifiers

建議從以下幾個開始:

  • “Development Status :: 3 — Alpha”
  • “License :: OSI Approved :: MIT License”
  • “ Programming Language :: Python”
  • “ Programming Language :: Python :: 3.5”
  • “ Programming Language :: Python :: 3.6”
  • “ Programming Language :: Python :: 3.7”
  • “Topic :: Software Development :: Libraries”
  • “Topic :: Software Development :: Libraries :: Python Modules”
  • “Intended Audience :: Developers”

以上就是這一環節的全部內容。

[[278379]]

圖2:選擇trove分類器后的艾斯·文圖拉

步驟五:建立發行文件

Python包位于發行文件中,這些文件會統一被上傳到一個服務器中(通常是PyPI全局服務器),供公眾下載。

本文不會詳細介紹發行格式。筆者將使用標準方法(https://packaging.python.org/tutorials/packaging-projects/)構建兩個文件:源發行文件(基本上包含了代碼包)和wheel發行文件(wheel build distribution file)。

首先,確保安裝了最新版本的setuptools 以及 wheel:

python3 -m pip install --user --upgrade setuptools wheel

要構建發行文件,只需在setup.py所在的存儲庫的根目錄中運行以下命令:

python setup.py sdist bdist_wheel

在這一步,需要Python運行setup.py這個腳本,并向它發送兩個參數,生成源文件(參數sdist),以及wheel工具來構建發行文件(參數bdist_wheel)。

運行此命令時,將在調用目錄中創建三個文件夾: build, dist 和 chocobo.egg-info。對于.gitignore 文件來說,這三個可以忽略不計。如果這些目錄已經存在(例如,該命令之前已經運行過了,最好用rm -rf build dist將這些目錄刪除掉,因為dist 下的任何有效代碼包文件都將被上傳。

要上傳的兩個文件位于dist 文件夾中:分別為chocobo-0.0.3-py-none.any.whl (構建發行;是一個wheel 文件)和chocobo-0.0.3.tar.gz (源發行;是一個壓縮的tar 文件)。創建成功后,我們繼續上傳的步驟!

步驟六:上傳

剩下的步驟就是將代碼包上傳到PyPI全局服務器!然而,用戶必須先在PyPI網站上注冊。按照注冊的步驟填寫用戶名和密碼。

如果想在上傳到PyPI全局服務器之前測試包,程序員也可以在測試PyPI網站上注冊一個用戶。

現在,用于上傳的Python包將在.pypirc文本文件中查找PyPI用戶名和密碼(通過PyPI服務器進行驗證),該文件通常位于主文件夾中。創建后按如下所示進行填寫(testpypi 部分視具體情況而定):

  1. [distutils] 
  2. index-servers = 
  3.  pypi 
  4.  testpypi 
  5. [pypi] 
  6. username: teapot48 
  7. password: myPYPIpassword 
  8. [testpypi] 
  9. repository: https://test.pypi.org/legacy/ 
  10. username: teapot48 
  11. password: MYtestPYPIpassword 

本文依照最新的方法將文件上傳到PyPI服務器中,并使用twine(上傳Python包的實用工具),而不是使用過時的python setup.py upload 。只需運行:

twine upload dist/*

如果想在PyPI服務器上進行測試,只需運行 twine upload — repository testpypi dist/*

不論如何,上傳.whl 文件時都應該能看到一個進度條,上傳.tar.gz 文檔時應該也能看到一個進度條,然后上傳就完成了。

現在可以在PyPI官方網站上看到自己的Python包頁面了,大家也都能看到!

示例:https://pypi.org/project/birch/

 

圖3:PyPI網站上包頁面的示例

 

大功告成!

責任編輯:華軒 來源: 今日頭條
相關推薦

2011-10-14 10:48:02

2021-06-22 14:53:35

零信任網絡安全網絡攻擊

2010-09-07 14:42:28

2017-10-09 18:54:20

前端Node.js貢獻代碼

2019-02-20 13:25:28

無邊界網絡網絡安全網絡攻擊

2011-11-18 10:04:46

Citrix私有云

2022-04-06 18:46:35

云戰略云計算云服務

2023-05-22 15:53:06

JavaScrip代碼素材

2010-08-30 11:28:53

DHCP工作過程

2021-10-21 08:00:00

開發技能技術

2024-11-08 17:07:56

2022-10-17 09:15:37

2022-09-08 09:01:41

CodePenJavaScripCSS

2024-01-16 15:19:29

Python內存

2023-11-03 15:38:17

2019-01-07 07:57:27

物聯網運營效率IOT

2019-07-05 09:00:00

軟件開發數據

2022-09-06 08:07:24

SQL語句查詢

2022-11-25 12:25:27

Python代碼編輯器

2009-06-04 10:20:34

Hibernate持久化Java
點贊
收藏

51CTO技術棧公眾號

天使と恶魔の榨精在线播放| 中文字幕一区二区三区免费看| 超碰97久久| 色婷婷av一区二区三区之一色屋| 亚洲欧洲国产精品久久| 国产欧美日韩成人| 夜夜爽av福利精品导航| www.色综合| 捆绑裸体绳奴bdsm亚洲| 国产原创一区| 婷婷六月综合网| 日韩视频免费观看| 亚洲免费观看在线| 亚洲精品555| 亚洲妇女屁股眼交7| 日韩一区免费观看| 乱精品一区字幕二区| 麻豆免费精品视频| 国产91精品久久久久久久| 欧美肥妇bbwbbw| 伊人久久大香线蕉综合网站| 日韩小视频在线观看专区| 免费观看精品视频| 美足av综合网| 亚洲天堂av老司机| 日韩欧美在线一区二区| 天堂网在线观看视频| 精品一区二区免费在线观看| 日韩美女免费视频| 国产精品19乱码一区二区三区| 999视频精品| 亚洲欧洲在线免费| 白嫩情侣偷拍呻吟刺激| 国产精品一区二区三区av| 欧美在线免费播放| 国产精品秘入口18禁麻豆免会员 | 亚洲精品视频中文字幕| 成人免费播放视频| 99视频这里有精品| 欧美日韩精品免费观看视频| 欧美韩国日本在线| 台湾佬中文娱乐网欧美电影| 亚洲高清免费在线| 日韩精品一区二区免费| 成人在线app| 亚洲欧美怡红院| 一区二区视频在线观看| 免费大片黄在线观看视频网站| 国产三级精品三级在线专区| 欧美lavv| 国产在线视频网| 国产无遮挡一区二区三区毛片日本| 久热这里只精品99re8久| 天天综合在线视频| 99re这里只有精品6| 国产欧美一区二区三区不卡高清| www.午夜激情| 成人在线视频一区二区| 国产精品久久久久久久久久直播| 丁香六月天婷婷| 成人免费看黄yyy456| 国精产品99永久一区一区| 色wwwwww| 久久久久久久综合色一本| 欧美精品一区二区三区在线四季 | 在线观看中文字幕网站| 久久国产三级精品| 91久久在线播放| 午夜精品久久久久久久99老熟妇| 成人午夜激情片| 精品国产一区二区三区四区vr| 天天干天天摸天天操| 久久久久久久电影| 亚洲综合视频一区| 欧美xxxx免费虐| 精品国产31久久久久久| 妓院一钑片免看黄大片| 高清精品久久| 亚洲第一页自拍| 精品人妻一区二区三区视频| 日韩精品欧美| 色在人av网站天堂精品| 欧美日韩一二三四区| 美女一区二区三区| 成人三级视频在线观看一区二区| 天堂中文字幕在线| 国产精品传媒视频| 久久久久久免费看| 成人看片毛片免费播放器| 日韩一区二区三区免费观看| 欧美丰满少妇人妻精品| 91麻豆国产自产在线观看亚洲| 欧美日韩成人在线观看| 久久久久久久久久成人| 国产精品99久久久久久久女警| 国产视频一区二区不卡| 在线免费观看的av网站| 亚洲高清一区二区三区| 午夜国产一区二区三区| 国产精品国产| 日日摸夜夜添一区| a v视频在线观看| 久久成人久久鬼色| 免费av在线一区二区| v片在线观看| 在线亚洲一区观看| 韩国三级在线看| av一区二区高清| 欧美精品videossex性护士| 超碰在线97观看| 成人av资源站| www.黄色网址.com| 日韩精品麻豆| 亚洲精品视频免费| 日本一区二区三区四区五区| 国产一区二区福利视频| 色99中文字幕| 都市激情亚洲一区| 亚洲国产中文字幕在线观看| 小泽玛利亚一区二区免费| 日韩国产欧美在线视频| 国产一区二区无遮挡| 99久久精品免费观看国产| 欧美日韩一区二区三区在线| 亚洲一区二区乱码| 欧美午夜一区| 91免费电影网站| 9色在线观看| 91久久一区二区| 亚洲制服丝袜在线播放| 国内精品久久久久久久影视麻豆| 成人国产亚洲精品a区天堂华泰| 日韩av免费观影| 午夜精品福利久久久| 高清中文字幕mv的电影| 欧美精选一区| 97视频热人人精品| 黄色网页在线播放| 91精品中文字幕一区二区三区| 日本人亚洲人jjzzjjz| 石原莉奈一区二区三区在线观看| 国产精品一 二 三| 91福利区在线观看| 精品国产乱子伦一区| 久久久精品人妻一区二区三区四 | 激情视频一区| 粉嫩av一区二区三区免费观看| 先锋成人av| 日韩精品一区在线观看| 国产精品变态另类虐交| 国产成人免费在线| 日韩国产成人无码av毛片| 伊人精品综合| 麻豆一区在线| 欧美激情亚洲激情| 人妻一区二区三区免费| 欧美日韩国产精品一区| 久久精品国产亚洲AV熟女| 久久亚洲欧美| 亚洲精品人成| 欧美成年网站| 高清欧美电影在线| 免费在线黄色网址| 欧美色图在线观看| 欧美日韩黄色网| 成人h动漫精品一区二| 欧美日韩亚洲一| 欧美日韩一区二区综合| 国产精品自拍网| 中文在线手机av| 亚洲高清福利视频| 日韩 国产 欧美| 亚洲日韩欧美一区二区在线| 免费黄色av网址| 亚洲中午字幕| 中文字幕一区二区三区四区五区人| 国产日韩欧美中文在线| 98精品国产自产在线观看| 精品视频三区| 在线综合+亚洲+欧美中文字幕| 国产在线拍揄自揄拍无码视频| 91麻豆精品一区二区三区| 天天视频天天爽| 黑人一区二区| 欧美久久在线| 欧美1区2区3| 国产成人av在线| 主播国产精品| 亚洲人成五月天| www.狠狠干| 色天使色偷偷av一区二区| 国产黄色小视频网站| 99国产精品一区| 波多野结衣国产精品| 亚洲每日更新| youjizz.com亚洲| 婷婷综合成人| 99视频在线播放| 国产精品人妻一区二区三区| 黄色的视频在线免费观看| 亚洲综合久久久久| x88av在线| 成人美女视频在线看| 一区二区三区网址| a91a精品视频在线观看| 亚洲一区bb| 久9久9色综合| 国产精品一区二区你懂得| 亚洲日本中文| 国产成人一区二区在线| 成人爽a毛片免费啪啪动漫| 中文字幕日韩电影| 天天操天天干天天爽| 欧美一区二区私人影院日本| 欧美日韩综合一区二区三区| 夜夜爽夜夜爽精品视频| 国产精品suv一区二区88| 91蜜桃在线观看| 污污污www精品国产网站| 国产一区二区三区精品欧美日韩一区二区三区 | 欧洲乱码伦视频免费| 精品欧美一区二区精品久久| 欧美视频二区欧美影视| 国产精品视频久| 神马电影网我不卡| 97视频免费在线观看| 大黄网站在线观看| 九九九久久国产免费| 免费a级在线播放| 在线成人一区二区| 国产在线色视频| 亚洲欧洲偷拍精品| 酒色婷婷桃色成人免费av网| 亚洲精品国产拍免费91在线| 人妻91麻豆一区二区三区| 日韩女优av电影| 国产乱码精品一区二区三区精东| 欧美日韩一区中文字幕| 中文字幕 人妻熟女| 91福利国产精品| 亚洲国产av一区二区三区| 91成人在线精品| 特黄视频免费看| 日韩欧美中文在线| 男人午夜免费视频| 色噜噜夜夜夜综合网| 国产一级片免费在线观看| 日本二三区不卡| 中文字幕91爱爱| 欧美日韩电影在线| 国产女人高潮时对白| 欧美一区二区成人| 刘玥91精选国产在线观看| 精品成人免费观看| 亚洲日本在线播放| 亚洲欧美国产精品va在线观看| 日本a一级在线免费播放| 亚洲毛片在线观看| 成人三级黄色免费网站| 中文字幕在线国产精品| 国产在线观看91| 九九视频直播综合网| av老司机免费在线| 奇米4444一区二区三区| av免费在线一区| 成人av色在线观看| 一区二区网站| 久久精品综合一区| 波多野结衣在线观看一区二区| 在线丝袜欧美日韩制服| 欧美91福利在线观看| youjizz.com在线观看| 国产精品日本| 亚洲第一中文av| 国产精品亚洲午夜一区二区三区| 秘密基地免费观看完整版中文| 久久久久久一级片| 波兰性xxxxx极品hd| 亚洲国产中文字幕在线视频综合| 亚洲日本视频在线观看| 欧美日韩成人高清| 蜜桃在线一区二区| 中文字幕不卡av| 欧美人与禽猛交乱配| 日本伊人精品一区二区三区介绍| 激情中国色综合| 激情小说网站亚洲综合网| 成人羞羞动漫| 欧美又粗又长又爽做受| 日韩电影免费一区| 香蕉视频在线观看黄| 国产午夜精品一区二区三区嫩草 | 色欧美88888久久久久久影院| 亚洲一级黄色大片| 亚洲韩国欧洲国产日产av | 亚洲欧洲日韩av| 日本天堂在线视频| 6080日韩午夜伦伦午夜伦| 香蕉视频成人在线| 久久亚洲精品一区二区| 欧美美最猛性xxxxxx| 日本在线中文字幕一区二区三区| 99久久久久国产精品免费| 日韩国产欧美| 国产资源在线视频| 国产一区二区三区四区五区美女| 亚洲精品视频久久久| 亚洲午夜精品在线| 91av国产精品| 亚洲系列中文字幕| 午夜欧美激情| 国产精品.com| 亚洲精品成人| 一区二区三区国产免费| 99免费精品在线观看| 成人免费毛片东京热| 欧美色图第一页| 欧美捆绑视频| 91精品国产99| 91精品久久久久久综合五月天| 一区高清视频| 可以看av的网站久久看| 久久午夜夜伦鲁鲁片| 亚洲最大的成人av| 国产情侣自拍小视频| 日韩小视频在线| 日本一道高清亚洲日美韩| 久久综合狠狠综合久久综青草| 国产一区二区三区自拍| 在线观看av免费观看| 国产精品天天摸av网| 国产真人无遮挡作爱免费视频| 日韩电影中文 亚洲精品乱码| tube8在线hd| 国产91视觉| 欧美日本在线| 日韩av在线免播放器| 天堂网在线中文| 午夜精品久久久久久久久久久久久 | 激情久久一区| 久久国产免费视频| 亚洲综合色区另类av| av中文字幕在线免费观看| 久久精品国产电影| 99综合99| 国产一级片91| 国产免费一区二区三区四区| 欧美日本乱大交xxxxx| 日本在线免费网| 成人国产精品免费视频| 欧美一区激情| 日本黄色一级网站| 亚洲宅男天堂在线观看无病毒| 亚洲a视频在线| 久久理论片午夜琪琪电影网| 激情av综合| 青青艹视频在线| 久久精品视频一区二区三区| 免费精品一区二区| 中文字幕一区二区三区电影| 亚洲一区av| 男女激情免费视频| www.99精品| 中文字幕免费播放| 久久精品国产2020观看福利| 亚洲三区欧美一区国产二区| 美脚丝袜脚交一区二区| 91老师国产黑色丝袜在线| 国产精品xxxxxx| 久久精品国产亚洲7777| 国产精品网址| 日本熟妇人妻中出| 亚洲色图视频免费播放| 亚洲av无码片一区二区三区| 天堂va欧美ⅴa亚洲va一国产| 国产亚洲黄色片| 久久久99免费| 精品国产九九九| 欧美在线免费视频| 偷拍欧美精品| 色婷婷免费视频| 欧美人妇做爰xxxⅹ性高电影| 午夜成年人在线免费视频| 美乳视频一区二区| 九九热在线视频观看这里只有精品| 国产真实的和子乱拍在线观看| 亚洲日韩中文字幕在线播放| 成人免费91| 国产xxxxx在线观看| 136国产福利精品导航| 亚州av在线播放| 成人黄色在线免费| 西西人体一区二区| 国产真实乱在线更新| 亚洲欧洲在线视频| 视频一区中文字幕精品| 亚洲精品一二三四五区| 亚洲福利一二三区| 伦xxxx在线| 日本精品一区二区三区不卡无字幕|