我正在嘗試將列表中的每個項目的需求自動安裝到它自己的virtualenv中。我已經得到了正確製作的virtualenv的觀點,但我不能讓它激活和安裝要求納入只的virtualenv:你如何在python腳本中對任意virtualenv安裝需求?
#!/usr/bin/env python
import subprocess, sys, time, os
HOMEPATH = os.path.expanduser('~')
CWD = os.getcwd()
d = {'cwd': ''}
if len(sys.argv) == 2:
projects = sys.argv[1:]
def call_sp(command, **arg_list):
p = subprocess.Popen(command, shell=True, **arg_list)
p.communicate()
def my_makedirs(path):
if not path.startswith('/home/cchilders'):
path = os.path.join(HOMEPATH, path)
try: os.makedirs(path)
except: pass
for project in projects:
path = os.path.join(CWD, project)
my_makedirs(path)
git_string = 'git clone [email protected]:codyc54321/{}.git {}'.format(project, d['cwd'])
call_sp(git_string)
d = {'executable': 'bash'}
call_sp("""source /usr/local/bin/virtualenvwrapper.sh && mkvirtualenv --no-site-packages {}""".format(project), **d)
# call_sp("""source /usr/local/bin/virtualenvwrapper.sh && workon {}""".format(project), **d)
# below, the dot (.) means the same as 'source'. the dot doesn't error, calling source does
call_sp('. /home/cchilders/.virtualenvs/{}/bin/activate'.format(project))
d = {'cwd': path}
call_sp("pip install -r requirements.txt", **d)
它的工作原理高達
call_sp("""source /usr/local/bin/virtualenvwrapper.sh && mkvirtualenv --no-site-packages {}""".format(project), **d)
但腳本結束時,我不活躍在venv,venv沒有任何要求的包裹。收集venv(被註釋掉的和生活中的一個)的努力都失敗了。
幫助我得到mkvirtualenv工作的答案是subprocess.Popen: mkvirtualenv not found。
我也注意到我需要做的不僅僅是pip安裝,在一種情況下,我需要運行'python setup.py mycommand',它爲每個項目自動安裝。如何運行命令,就好像一個virtualenv被激活,並且還將依賴關係安裝到python腳本中的任意venvs中?
我周圍發現的唯一方法是手動轉換virtualenv,然後手動調用我的python腳本。我很驚訝,我把它由bash的工作,但呼籲轟炸了python腳本(也許是因爲它是一個不同的過程比bash的一個)
謝謝
我的同事說我可以用venv中的python和venv中的pip文件來調用它。我現在正在測試它。謝謝你的解釋,把bash和python結合起來就是開玩笑 – codyc4321