text: user4733: I have read this question (Running Snakemake in one single conda env) but still have some doubt.
  I am using the '--conda-prefix /some/dir' option and I have a rule in my snakemake file with the directive:
  rule xxx:
    ...
    conda:    
      "envs/some.yaml"
    ...
  
  The first call of that rule will create the conda environment according to the yaml file in /some/dir/envs with some random name (in my case 'bf55a79e'). If I run the workflow in a different directory, the same conda environment (/some/dir/envs/bf55a79e) gets activated directly instead of being built again. So this is what I expected.
  My question is: 
  
  is there some way of skipping the building and specifying that rule xxx should use an already existing conda environment somewhere? 
  does anyone know where the mapping between rule and directory gets stored?
  
  
  user77: 
  If the environment already exists it will simply be used. You cannot, however, tell it to use an environment with a normal name (e.g., "my_env").
  I assume you mean, "where the heck does the random looking conda environment name come from?!?", which is a very good question. The answer to that is that it's a hash of the --conda-prefix setting and the contents of the environment yaml file you specify. The actual code for doing this (I'm "stealing" it from snakePipes) is:
  
  import hashlib
  md5hash = hashlib.md5()
  md5hash.update("what you gave to --conda-prefix".encode())
  f = open("your environment yaml file", 'rb')
  md5hash.update(f.read())
  f.close()
  h = md5hash.hexdigest()
  
  h is then the directory name. There are actually two lengths of those, the shorter 8 character version that snakeMake uses by default or the full length version that the code above will produce. snakeMake will actually use either of these. If you're wondering, no I don't think any of this is documented anywhere, you have to dig through the snakeMake code to find it.
  
original_text: 4733: <p>I have read this question (<a href="https://bioinformatics.stackexchange.com/questions/6914/running-snakemake-in-one-single-conda-env">Running Snakemake in one single conda env</a>) but still have some doubt.</p>
  
  <p>I am using the '--conda-prefix /some/dir' option and I have a rule in my snakemake file with the directive:</p>
  
  <pre><code>rule xxx:
    ...
    conda:    
      "envs/some.yaml"
    ...
  </code></pre>
  
  <p>The first call of that rule will create the conda environment according to the yaml file in /some/dir/envs with some random name (in my case 'bf55a79e'). If I run the workflow in a different directory, the same conda environment (/some/dir/envs/bf55a79e) gets activated directly instead of being built again. So this is what I expected.</p>
  
  <p>My question is: </p>
  
  <ul>
  <li>is there some way of skipping the building and specifying that rule xxx should use an already existing conda environment somewhere? </li>
  <li>does anyone know where the mapping between rule and directory gets stored?</li>
  </ul>
   77: <ol>
  <li>If the environment already exists it will simply be used. You cannot, however, tell it to use an environment with a normal name (e.g., "my_env").</li>
  <li>I assume you mean, "where the heck does the random looking conda environment name come from?!?", which is a very good question. The answer to that is that it's a hash of the <code>--conda-prefix</code> setting and the contents of the environment yaml file you specify. The actual code for doing this (I'm "stealing" it <a href="https://github.com/maxplanck-ie/snakepipes/blob/master/bin/snakePipes#L174" rel="nofollow noreferrer">from snakePipes</a>) is:</li>
  </ol>
  
  <pre class="lang-py prettyprint-override"><code>import hashlib
  md5hash = hashlib.md5()
  md5hash.update("what you gave to --conda-prefix".encode())
  f = open("your environment yaml file", 'rb')
  md5hash.update(f.read())
  f.close()
  h = md5hash.hexdigest()
  </code></pre>
  
  <p><code>h</code> is then the directory name. There are actually two lengths of those, the shorter 8 character version that snakeMake uses by default or the full length version that the code above will produce. snakeMake will actually use either of these. If you're wondering, no I don't think any of this is documented anywhere, you have to dig through the snakeMake code to find it.</p>
  