[英]virtualenv install packages (activate virtual environment first) vs pipenv install packages (activate virtual environment later)?
[英]How to install python packages in virtual environment only with virtualenv bootstrap script?
我想創建一個引導腳本來設置本地環境並在其中安裝所有要求。 我一直在按照他們的文檔中的描述嘗試使用 virtualenv.create_bootstrap_script。
import virtualenv
s = virtualenv.create_bootstrap_script('''
import subprocess
def after_install(options, home_dir):
subprocess.call(['pip', 'install', 'django'])
''')
open('bootstrap.py','w').write(s)
運行生成的 bootstrap.py 時,它會正確設置虛擬環境,但隨后會嘗試全局安裝 Django。
如何編寫僅在此本地虛擬環境中安裝 Django 的引導腳本。 它必須在 Windows 和 Linux 上工作。
您可以通過以下方式強制 pip 安裝到您的 virtualenv 中:
subprocess.call(['pip', 'install', '-E', home_dir, 'django'])
此外,將您的依賴項存儲在 requirements.txt 文件中是一個很好且有用的約定,對於 django 1.3 來說是:
django==1.3
然后在你的after_install
中:
subprocess.call(['pip', 'install', '-E', home_dir, '-r', path_to_req_txt])
您需要將它傳遞給 virtualenv 中的pip
腳本的完全限定路徑。
subprocess.call([join(home_dir, 'bin', 'pip'),'install','django'])
適用於 Windows 和 Linux 的解決方案。它使用 pip,剛剛由引導腳本安裝。
import virtualenv
s = '''
import subprocess, os
def after_install(options, home_dir):
if os.name == 'posix':
subprocess.call([os.path.join(home_dir, 'bin', 'pip'), 'install', '-r', 'requirements.txt'])
else:
subprocess.call([os.path.join(home_dir, 'Scripts', 'pip.exe'), 'install', '-r', 'requirements.txt'])
'''
script = virtualenv.create_bootstrap_script(s, python_version='2.7')
f = open('bootstrap.py','w')
f.write(script)
f.close()
只需將您的需求放在requirements.txt
中,每 package 一行:
django
django-registration==1.4.3
請參閱: Pip - 需求文件
對我有用的是從新創建的環境訪問pip 。
pip = os.path.join(home_dir, 'bin', 'pip')
之后,我嘗試像您之前那樣安裝django 。
subprocess.call([pip, 'install', 'django'])
記住操作系統導入:
import os, subprocess
希望對你有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.