<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Alessandro Marrella - til</title>
    <link rel="self" type="application/atom+xml" href="https://alessandromarrella.com/tags/til/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://alessandromarrella.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-03-19T00:00:00+00:00</updated>
    <id>https://alessandromarrella.com/tags/til/atom.xml</id>
    <entry xml:lang="en">
        <title>Avoiding select * in BigQuery</title>
        <published>2025-03-19T00:00:00+00:00</published>
        <updated>2025-03-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alessandro Marrella
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alessandromarrella.com/feed/posts/avoid-select-star/"/>
        <id>https://alessandromarrella.com/feed/posts/avoid-select-star/</id>
        <content type="html" xml:base="https://alessandromarrella.com/feed/posts/avoid-select-star/">&lt;p&gt;A quick workaround to avoid people doing &amp;quot;SELECT *&amp;quot; on your tables (which I consider harmful, see &lt;a href=&quot;https:&#x2F;&#x2F;stackoverflow.com&#x2F;questions&#x2F;3639861&#x2F;why-is-select-considered-harmful&quot;&gt;stackoverflow&lt;&#x2F;a&gt;) in BigQuery is the following:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Create a policy tag in the &lt;a href=&quot;https:&#x2F;&#x2F;console.cloud.google.com&#x2F;bigquery&#x2F;policy-tags&quot;&gt;policy tags page&lt;&#x2F;a&gt;. I create it under a new taxonomy &amp;quot;sql_rules&amp;quot;, and call it &amp;quot;no_select_star&amp;quot;&lt;&#x2F;li&gt;
&lt;li&gt;Once created, in the policy tag taxonomy page I enable the &amp;quot;enforce access control&amp;quot; option. If you need users to bypass this policy (e.g. needs to run bigquery copy operations) you can add the &amp;quot;fine graded reader&amp;quot; role to the principal associated with the policy tag in the same page.&lt;&#x2F;li&gt;
&lt;li&gt;In the table you want to protect, add a dummy column (I call it &amp;quot;do_not_select_star&amp;quot;) and assign it the policy tag&lt;&#x2F;li&gt;
&lt;li&gt;Done! From now on, &lt;code&gt;SELECT *&lt;&#x2F;code&gt; will throw an error.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;For more info see &lt;a href=&quot;https:&#x2F;&#x2F;cloud.google.com&#x2F;bigquery&#x2F;docs&#x2F;column-level-security-intro&quot;&gt;Google Cloud docs&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>How to quickly profile python imports and runtime </title>
        <published>2024-07-20T00:00:00+00:00</published>
        <updated>2024-07-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alessandro Marrella
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alessandromarrella.com/feed/posts/python-profiling/"/>
        <id>https://alessandromarrella.com/feed/posts/python-profiling/</id>
        <content type="html" xml:base="https://alessandromarrella.com/feed/posts/python-profiling/">&lt;p&gt;A small &lt;a href=&quot;https:&#x2F;&#x2F;alessandromarrella.com&#x2F;tags&#x2F;til&#x2F;&quot;&gt;TIL&lt;&#x2F;a&gt; about Python profiling.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nschloe&#x2F;tuna&quot;&gt;tuna&lt;&#x2F;a&gt; is a really handy tool that renders the output of &lt;a href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;profile.html&quot;&gt;cProfile&lt;&#x2F;a&gt; and &lt;code&gt;python -X importtime&lt;&#x2F;code&gt; logs into an easy to navigate tree. &lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>NOT IN and NOT EXISTS don&#x27;t always produce the same result</title>
        <published>2024-06-01T00:00:00+00:00</published>
        <updated>2024-06-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alessandro Marrella
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alessandromarrella.com/feed/posts/in-vs-exists/"/>
        <id>https://alessandromarrella.com/feed/posts/in-vs-exists/</id>
        <content type="html" xml:base="https://alessandromarrella.com/feed/posts/in-vs-exists/">&lt;p&gt;&lt;code&gt;IN&lt;&#x2F;code&gt; and &lt;code&gt;EXISTS&lt;&#x2F;code&gt; often produce the same result, but when negated and dealing with &lt;code&gt;NULL&lt;&#x2F;code&gt; values, they behave differently.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Let&#x27;s see an example, assume we have these two tables:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;orders&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;order_id&lt;&#x2F;th&gt;&lt;th&gt;customer_id&lt;&#x2F;th&gt;&lt;th&gt;amount&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;100&lt;&#x2F;td&gt;&lt;td&gt;50.00&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;101&lt;&#x2F;td&gt;&lt;td&gt;75.00&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;102&lt;&#x2F;td&gt;&lt;td&gt;30.00&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;NULL&lt;&#x2F;td&gt;&lt;td&gt;20.00&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;customers&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;customer_id&lt;&#x2F;th&gt;&lt;th&gt;name&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;100&lt;&#x2F;td&gt;&lt;td&gt;Bob&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;101&lt;&#x2F;td&gt;&lt;td&gt;Alice&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;102&lt;&#x2F;td&gt;&lt;td&gt;Martha&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;NULL&lt;&#x2F;td&gt;&lt;td&gt;John&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;em&gt;Ignore the fact that a well formed customers table would need to have the id always specified and ideally as a constraint. This is just an example.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now, let’s say we want to find orders where the customer_id is not present in the customers table.&lt;&#x2F;p&gt;
&lt;p&gt;Using &lt;code&gt;NOT EXISTS&lt;&#x2F;code&gt; we would write something like:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;SELECT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; orders o
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; NOT EXISTS (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;SELECT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; customers c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;WHERE &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;c&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;customer_id &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;o&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;customer_id&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The output, would probably be what we expect:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;order_id&lt;&#x2F;th&gt;&lt;th&gt;customer_id&lt;&#x2F;th&gt;&lt;th&gt;amount&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;NULL&lt;&#x2F;td&gt;&lt;td&gt;20.00&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Using &lt;code&gt;NOT IN&lt;&#x2F;code&gt; we would write something like:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-sql &quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;SELECT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;*
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; orders
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; customer_id NOT IN (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; customer_id &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; customers);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The output here will be empty!&lt;&#x2F;p&gt;
&lt;p&gt;When we use &lt;code&gt;NOT IN&lt;&#x2F;code&gt;, SQL checks each value in the orders table against the list of values returned by the subquery. If any value in the subquery result is &lt;code&gt;NULL&lt;&#x2F;code&gt;, the entire &lt;code&gt;NOT IN&lt;&#x2F;code&gt; comparison will result in &lt;code&gt;NULL&lt;&#x2F;code&gt; for each row in the orders table. This is because any comparison with &lt;code&gt;NULL&lt;&#x2F;code&gt; yields &lt;code&gt;NULL&lt;&#x2F;code&gt; and &lt;code&gt;NOT IN&lt;&#x2F;code&gt; needs &lt;strong&gt;all comparisons&lt;&#x2F;strong&gt; to be &lt;code&gt;TRUE&lt;&#x2F;code&gt; for a row to be included in the result.&lt;&#x2F;p&gt;
&lt;p&gt;This is not a problem with &lt;code&gt;NOT EXISTS&lt;&#x2F;code&gt;, because the  &lt;code&gt;NOT EXISTS&lt;&#x2F;code&gt; clause checks for the non-existence of rows that meet the criteria specified in the subquery. It does not perform direct comparisons with &lt;code&gt;NULL&lt;&#x2F;code&gt; in the same way &lt;code&gt;NOT IN&lt;&#x2F;code&gt; does. Instead, it simply checks if there are any rows that match the condition. If no such rows exist, the condition is true.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>How to run and serve a webserver in Google Colab without ngrok</title>
        <published>2024-05-20T00:00:00+00:00</published>
        <updated>2024-05-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alessandro Marrella
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alessandromarrella.com/feed/posts/run-webserver-in-colab/"/>
        <id>https://alessandromarrella.com/feed/posts/run-webserver-in-colab/</id>
        <content type="html" xml:base="https://alessandromarrella.com/feed/posts/run-webserver-in-colab/">&lt;p&gt;Today I learned how to run a webserver in Google Colab, without needing external services like ngrok. 
I&#x27;m using Dagster here as an example but any webserver should work.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;&lt;strong&gt;If you just want to create a public url for a webserver running in colab you can jump to step 4&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;step-1-install-the-required-packages&quot;&gt;Step 1: Install the Required Packages&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; href=&quot;#step-1-install-the-required-packages&quot; hidden=&quot;&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;!pip install dagster dagster-webserver
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;step-2-scaffold-a-new-dagster-project&quot;&gt;Step 2: Scaffold a New Dagster Project&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; href=&quot;#step-2-scaffold-a-new-dagster-project&quot; hidden=&quot;&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;!dagster project scaffold --name test
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;step-3-run-dagster-in-the-background&quot;&gt;Step 3: Run Dagster in the Background&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; href=&quot;#step-3-run-dagster-in-the-background&quot; hidden=&quot;&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;To run Dagster&#x27;s webserver, you&#x27;ll need to start it in the background. This can be done using Python&#x27;s subprocess module. The following code navigates to the project directory and starts the webserver on port 3000:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;subprocess
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;subprocess.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;Popen&lt;&#x2F;span&gt;&lt;span&gt;(
&lt;&#x2F;span&gt;&lt;span&gt;    [
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;bash&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;-c&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;,
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;cd &#x2F;content&#x2F;test &amp;amp;&amp;amp; dagster-webserver -h 0.0.0.0 -p 3000 &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;    ]
&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;step-4-create-a-public-url-for-the-webserver&quot;&gt;Step 4: Create a Public URL for the Webserver&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; href=&quot;#step-4-create-a-public-url-for-the-webserver&quot; hidden=&quot;&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Google Colab provides a way to create a public URL for your webserver. Use the output.serve_kernel_port_as_window function to expose the webserver running on port 3000.&lt;&#x2F;p&gt;
&lt;p&gt;This does the real magic. Note that the URL is authenticated, and only the user running the notebook has access to the webserver.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;google.colab &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;output
&lt;&#x2F;span&gt;&lt;span&gt;output.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;serve_kernel_port_as_window&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;3000&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;path&lt;&#x2F;span&gt;&lt;span&gt;=&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;you can also run it in an iframe with&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;output.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;serve_kernel_port_as_iframe&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;3000&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;putting-it-all-together&quot;&gt;Putting it all together&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; href=&quot;#putting-it-all-together&quot; hidden=&quot;&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;You can check out a full example in this &lt;a href=&quot;https:&#x2F;&#x2F;colab.research.google.com&#x2F;drive&#x2F;1SpHIlpWCeZ9nstRPUAvXLpOcTwt-P-Q9?usp=sharing&quot;&gt;Colab Notebook&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Avoiding ZIP does not support timestamps before 1980 in Nix with Python</title>
        <published>2020-09-15T00:00:00+00:00</published>
        <updated>2020-09-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alessandro Marrella
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alessandromarrella.com/feed/posts/avoiding-zip-does-not-support-timestamps-before-1980-error-in-nix/"/>
        <id>https://alessandromarrella.com/feed/posts/avoiding-zip-does-not-support-timestamps-before-1980-error-in-nix/</id>
        <content type="html" xml:base="https://alessandromarrella.com/feed/posts/avoiding-zip-does-not-support-timestamps-before-1980-error-in-nix/">&lt;p&gt;By default, nix sets the epoch to be 1 (which corresponds to 1970-01-01), this causes some issues when building some Python packages. 
Since the zip might contain files from the nix store, those are dated 1970 breaking the installation of the python package.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;To quickly fix the issue add this to your nix-shell&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sh&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-sh &quot;&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;export &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;SOURCE_DATE_EPOCH&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;315532800
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Related:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;NixOS&#x2F;nixpkgs&#x2F;issues&#x2F;270#issuecomment-467583872&quot;&gt;Github issue on Nixpkgs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;NixOS&#x2F;nixpkgs&#x2F;blob&#x2F;master&#x2F;doc&#x2F;languages-frameworks&#x2F;python.section.md#python-setuppy-bdist_wheel-cannot-create-whl&quot;&gt;Nix python docs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
</feed>