2017-08-03 103 views
1

我創建安裝在Python 3.6.1的PyCharm創建當前虛擬環境中使用瓶(其他幾個模塊之間)在PyCharm項目,以及應用程序本身PyCharm的偉大工程。但是,當我爲其他虛擬需求設置requirements.txt文件時,我注意到輸出文件中只列出了virtualenv。 (要創建文件,我去了「控制檯」,並做了「點擊凍結> requirements.txt」。)PyCharm不導出正確requirements.txt

經過測試一些事情後,我注意到pip list只給了我三個模塊安裝開始。我知道,因爲當我進入我的翻譯的設置,PyCharm說,有很多安裝了其他模塊的這是不正確的,但它似乎並不像他們實際上安裝。

我如何創建PyCharm實際上是要求文件?我是否必須列出安裝在自述文件中的所有模塊,並讓我的用戶瞭解如何自行安裝它們?下面

截圖:

項目設置對話框: Project Settings

皮普列表輸出: pip list

回答

0

這當然奇怪,我能想到的唯一的事情是,它是一個Windows上的virtualenv問題。

反正不會是創建最佳實踐您的requirements.txtpip freeze,因爲你已經安裝了比您的項目需要看到的更多的包。

E.g.讓說你的項目只需要瓶:

$ pip install Flask 
$ pip freeze 
click==6.7 
Flask==0.12.2 
itsdangerous==0.24 
Jinja2==2.9.6 
MarkupSafe==1.0 
Werkzeug==0.12.2 

你可以通過安裝瓶有更多的軟件包安裝了看,但你沒有列出那些在您的requirements.txt,因爲他們是不是你的項目的需求,他們是Flask的要求。

因此,你應該手動構建您的requirements.txt。我最常做的是pip install Flask; pip freeze |grep Flask而行Flask==0.12.2複製到我的requirements.txt,這樣做我安裝的東西與pip每次。

+0

但是如果Flask本身需要使用這些模塊呢?例如,在我的代碼中,我從不顯式導入Jinja2,但我知道我正在使用它。我覺得手動排除文件只是因爲我不使用它們是一個冒險的決定。 –

+0

當您執行'pip install -r requirements.txt'時,它會看到Flask並開始安裝Flask,Flask將在該進程中列出自己的需求,因此也安裝這些需求。即你需要Flask,Flask需要Jinja2。 –

1

使用pipreqs

$ pip install pipreqs 
$ pipreqs /home/project/location 
Successfully saved requirements file in /home/project/location/requirements.txt 

這會在當前項目目錄中使用的包導出到requirements.txt

pipreqs

爲什麼不PIP凍結?

  • PIP凍結只保存一份安裝PIP包 安裝在您的環境。
  • pip freeze將所有包保存在 環境中,包括那些在當前的 項目中未使用的包。 (如果您沒有virtualenv)
  • 有時您只需要 就可以在不安裝 模塊的情況下爲新項目創建requirements.txt。
+0

pipreqs似乎不起作用。它只會引發無法解碼字符的錯誤。 –

+0

@BenSchwabe你可以用'--encoding = utf-8'選項試試看看錯誤是否存在 –