Skip to main content
 首页 » 编程设计

python之Puppet 只创建一次 virtualenv

2025年05月04日22telwanggs

我在我的 list 中使用这个类:

python::virtualenv { $virtualenv_dir: 
ensure => present, 
version => 'system', 
systempkgs => false, 
distribute => false, 
owner => $user, 
group => $group, 
} 

第一次效果很好。

问题是我启动了几个使用 venv/bin/python 文件的守护进程 celery worker。

当我第二次应用 list 时,我得到:

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' 

如果还没有创建 venv 目录,是否有可能只运行 virtualenv 命令?

或者您有什么建议?我不想在应用 puppet list 时停止我的 celery worker 。

请您参考如下方法:

仅当尚未创建特定文件时,才可以运行 exec 资源的命令,方法是使用 creates 参数:

exec { 'mycommand': 
    command => '/usr/bin/something a b c', 
    creates => '/var/lib/xxx'; 
} 

只有当 /var/lib/xxx 不存在时才会运行命令。