2013-07-15 32 views
2

創建一個新的文件夾,並創建一個虛擬環境安裝瓶+ gunicorn PIP後有意外的依賴

$ virtualenv venv --distribute 

和安裝兩個包

$ pip install Flask gunicorn 

然後編寫所有的當前畫中畫的安裝包後一個文件

$ pip freeze > requirements.txt 
$ cat requirements.txt 
Flask==0.10.1 
Jinja2==2.7 
MarkupSafe==0.18 
Werkzeug==0.9.1 
distribute==0.6.34 
gunicorn==17.5 
itsdangerous==0.22 
wsgiref==0.1.2 

我得到這個長於預期的pac列表kages負責他們的安裝,他們用於什麼?有問題的包裝清單:

wsgiref==0.1.2 
itsdangerous==0.22 
distribute==0.6.34 
MarkupSafe==0.18 

我大部分使用PIP在我的Ubuntu框,沒有這些包相同的命令後安裝的,我發現只有在我的Mac此行爲。

回答

3

wsgirefdistribute總是出現在virtualenv中,即使是一個「空」的,你還沒有編輯任何東西。對於我的問題Why does pip freeze report some packages in a fresh virtualenv created with --no-site-packages?,請參閱accepted answer以獲得解釋。請注意,這是在Python 3.3中修復的a bug

itsdangerousMarkupSafe是比較新的,新的依賴關係由新的Flask版本引入。

  • itsdangerousdocs)由Flask直接需要。從版本0.10開始 - 請參閱github commit其中添加了此依賴關係。
  • MarkupSafedocs)需要Jinja2這是Flask所要求的。 Jinja2在2.7版中增加了這種依賴關係 - 請參閱github commit

你說在運行完全相同的命令後,這些文件並沒有安裝在你的Ubuntu機器上。但是你有什麼版本的FlaskJinja2?如果它們比Mac上的版本舊,這可能可以解釋爲什麼它們沒有引入這些新的依賴關係。

+0

你說得沒錯,我在Ubuntu Flask上的經驗並不是最新的,所以這兩個依賴似乎都是在這之後加入的。輝煌的答案! –

1

它看起來像那些Flaskdependencies(或燒瓶依賴的依賴)

pip install --no-install --verbose Flask

我希望pypi had a list of dependencie S代表每一個項目,但我沒有看到他們...

+0

的確,謝謝!雖然有兩個依賴仍然留下無法解釋的'wsgiref'和'distribute' –

+1

@MorganWilde確實。這是一個錯誤。請參閱[我的答案](http://stackoverflow.com/a/17665936/445073) – Day

1

您的virtualenv使用系統安裝的軟件包,因此pip會在新安裝的軟件包中看到它們。

嘗試在創建環境時添加--no-site-packages選項。

或者,嘗試明確運行安裝在您的環境 (path/to/your/env/bin/pip opts...)中的pip實例,也許這會告訴pip忽略系統的包(根本不確定)。

+0

您能詳細闡述一下您的觀點:「venv使用系統安裝的軟件包」嗎?我個人不記得在系統範圍內安裝任何軟件包,除非意外......有沒有辦法檢查安裝了系統的@astrognocci? –

+1

@Morgan Wilde:檢查系統是否安裝了什麼,只是在不使用virtualenv的情況下進行pip凍結(pip也需要安裝在系統上)apt-get在像Debian這樣的Debian上安裝python-pip。我前一陣子遇到了一些問題,我試圖在venv和pip中安裝nosetests,檢測系統的一個,只是中止,而不是獲得新的實例。我認爲dm03514得到了正確的答案,tho。 – astrognocci

+0

感謝您放縱我,再一次觀察 - 在檢查了我的系統廣泛點後,我確實看到了比我的問題更多的列表。你如何解釋,如果你的原始前提是 - pip可以看到所有新安裝的產品? @astrognocci –

相關問題