首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python子进程从houdini运行miniconda3/etc/profile.d/conda.sh

Python子进程从houdini运行miniconda3/etc/profile.d/conda.sh
EN

Stack Overflow用户
提问于 2020-09-21 21:53:31
回答 2查看 226关注 0票数 0

我被困在一个非常奇怪的行为在我的眼睛。我想从胡迪尼(https://www.sidefx.com/)创建一个进程,这个进程应该初始化conda并激活一个环境。如果我使用python2.7从终端运行我的代码,一切都会正常工作。

代码语言:javascript
复制
import os
import sys
import subprocess
conda_path = "/home/alelidis/miniconda3"

print("============================ Python version ============================")
print (sys.version)

my_env = {}
my_env["PYTHONHOME"] = conda_path + ":" + conda_path + "/envs/tflow1.15.0-cuda10-python3"
my_env["PATH"] = '/home/alelidis/miniconda3/bin:/opt/hfs18.0.566/bin:/opt/hfs18.0.566/houdini/sbin:/usr/bin'

script_cmd = 'source ' + os.path.join(conda_path, 'etc/profile.d/conda.sh')  + ' && ' 
script_cmd += 'conda activate tflow1.15.0-cuda10-python3' + ' && '
script_cmd += 'python --version' + ' && '
script_cmd += 'conda deactivate'


#print script_cmd
print("---------------------")
print ("PATH:")
# If shell=True, the command string is interpreted as a raw shell command.
print subprocess.check_output('echo $PATH', shell=True, env=my_env, executable='/bin/bash')
print ("PYTHONHOME:")
print subprocess.check_output('echo $PYTHONHOME', shell=True, env=my_env, executable='/bin/bash')
print ("python version:")
print subprocess.check_output('python --version', shell=True, env=my_env, executable='/bin/bash')
print ("python should be: 3.8.3")

print("++++++++++++++++++++++++++")
print subprocess.check_output(script_cmd, shell=True, executable='/bin/bash')

返回以下输出:

代码语言:javascript
复制
============================ Python version ============================
2.7.15 |Anaconda, Inc.| (default, Dec 14 2018, 19:04:19) 
[GCC 7.3.0]
---------------------
PATH:
/home/alelidis/miniconda3/bin:/opt/hfs18.0.566/bin:/opt/hfs18.0.566/houdini/sbin:/usr/bin

PYTHONHOME:
/home/alelidis/miniconda3:/home/alelidis/miniconda3/envs/tflow1.15.0-cuda10-python3

python version:
Python 3.8.3

python should be: 3.8.3
++++++++++++++++++++++++++
source /home/alelidis/miniconda3/etc/profile.d/conda.sh && conda activate tflow1.15.0-cuda10-python3 && python --version && conda deactivate
++++++++++++++++++++++++++
Python 3.7.9

但是,当我尝试从Houdini运行相同的代码时,我得到了以下错误:

代码语言:javascript
复制
============================ Python version ============================
2.7.15 (default, Mar 11 2020, 10:04:04) 
[GCC 6.3.1 20170216 (Red Hat 6.3.1-3)]
---------------------
PATH:
/home/alelidis/miniconda3/bin:/opt/hfs18.0.566/bin:/opt/hfs18.0.566/houdini/sbin:/usr/bin

PYTHONHOME:
/home/alelidis/miniconda3/bin:/home/alelidis/miniconda3/envs/tflow1.15.0-cuda10-python3

python version:
Python 3.8.3

python should be: 3.8.3
++++++++++++++++++++++++++
source /home/alelidis/miniconda3/etc/profile.d/conda.sh && conda activate tflow1.15.0-cuda10-python3 && python --version && conda deactivate
++++++++++++++++++++++++++
Traceback (most recent call last):
  File "/home/alelidis/miniconda3/bin/conda", line 12, in <module>
    from conda.cli import main
  File "/home/alelidis/miniconda3/lib/python3.8/site-packages/conda/__init__.py", line 22, in <module>
    from .common.compat import text_type, iteritems
  File "/home/alelidis/miniconda3/lib/python3.8/site-packages/conda/common/compat.py", line 14, in <module>
    from tempfile import mkdtemp
  File "/home/alelidis/miniconda3/lib/python3.8/tempfile.py", line 45, in <module>
    from random import Random as _Random
  File "/home/alelidis/miniconda3/lib/python3.8/random.py", line 41, in <module>
    from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil
ModuleNotFoundError: No module named 'math'

我不知道为什么会发生这种事!任何帮助或指针都将非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2020-09-22 04:40:03

这可能仍然是一个环境问题。尝试继承当前环境,然后对其进行编辑,而不是创建空白环境。您还完全覆盖了PATH env var,而不是添加/编辑可能会导致问题的条目。另一件要尝试的事情是设置working directory for the subprocess command。但是仍然不确定为什么会出现这个错误。

代码语言:javascript
复制
my_env = os.environ.copy()
my_env["PYTHONHOME"] = conda_path + ":" + conda_path + "/envs/tflow1.15.0-cuda10-python3"
my_env["PATH"] = '/home/alelidis/miniconda3/bin:/opt/hfs18.0.566/bin:/opt/hfs18.0.566/houdini/sbin:/usr/bin'

您也可以尝试执行python脚本,而不是使用标准I/O。我还没有尝试过蟒蛇,但我已经成功地从胡迪尼启动了MayaPy,如下所示:

代码语言:javascript
复制
cmdArgs = [mayaPyPath, pyScriptPath]
output = subprocess.call(cmdArgs, cwd=mayaPyWorkDir, shell=False, env=curEnv)
票数 0
EN

Stack Overflow用户

发布于 2020-09-22 21:55:52

我发现Houdini正在覆盖我用python设置的环境变量。所以在我通过内部GUI删除了PYTHONHOME变量之后,它就像预期的那样工作了。老实说,我仍然不完全确定为什么会发生这种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63993750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档