다음은 내 매니페스트의 일부입니다(이 모듈을 기반으로 함:https://github.com/stankevich/puppet-python):
python::virtualenv { $virtualenv_dir:
ensure => present,
version => 'system',
systempkgs => false,
distribute => false,
owner => $user,
group => $group,
}
처음으로 꼭두각시 적용을 실행할 때 제대로 작동합니다. 두 번째로 실패했지만 :
Already using interpreter /usr/bin/python
Traceback (most recent call last):
File "/usr/bin/virtualenv", line 3, in
virtualenv.main()
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 938, in main
never_download=options.never_download)
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 1039, in create_environment
site_packages=site_packages, clear=clear))
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 1274, in install_python
shutil.copyfile(executable, py_executable)
File "/usr/lib/python2.7/shutil.py", line 83, in copyfile
with open(dst, 'wb') as fdst:
IOError: [Errno 26] Text file busy: '/usr/local/myapp/venv/bin/python'
이는 아마도 virtualenv(Celery 작업자, uwsgi 작업자 등)의 Python 바이너리를 사용하여 실행되는 백그라운드 프로세스가 많기 때문일 것입니다.
처음으로 virtualenv를 초기화하는 방법이 있나요? 디렉토리가 생성되면 virtualenv 명령을 실행할 필요가 없습니다. 그렇죠?
답변1
다음 클래스는 가상 환경을 생성합니다. "creates"는 virtualenv가 존재하지 않는 경우에만 명령이 실행되도록 제한합니다.
class virtualenv ( $virtualenv_dir ) {
package{'python-virtualenv':
ensure => installed,
}
exec{'create_virtualenv':
creates => $virtualenv_dir,
command => "virtualenv $virtualen_dir",
require => Package['python-virtualenv'],
}
}
다음을 사용하여 수업을 호출합니다.
class {'virtualenv':
virtualenv_dir => '/path/to/virtualenv',
}