**Apache Airflow version**

13faa6912f7cd927737a1dc15630d3bbaf2f5d4d

**Environment**

- **Configuration**: Local Executor
- **OS** (e.g. from /etc/os-release): Mac OS 11.3
- **Kernel**: Darwin Kernel Version 20.4.0
- **Install tools**: `pip install -e .`

**The DAG**

```python
def callable():
    print("hi")

with DAG(dag_id="two_virtualenv") as dag:

    a = PythonOperator(
        task_id="a",
        python_callable=callable,
    )

    # b = PythonOperator(          # works
    b = PythonVirtualenvOperator(  # doesn't work
        task_id="b",
        python_callable=callable,
    )

    a >> b
```

**What happened**:
Failure somewhere between first task and second:
```
INFO - Marking task as SUCCESS. dag_id=two_virtualenv, task_id=a
ERROR - Failed to execute task: cannot pickle 'module' object.
Traceback (most recent call last):
  File "/Users/matt/src/airflow/airflow/executors/debug_executor.py", line 79, in _run_task
    ti._run_raw_task(job_id=ti.job_id, **params)  # pylint: disable=protected-access
  File "/Users/matt/src/airflow/airflow/utils/session.py", line 70, in wrapper
    return func(*args, session=session, **kwargs)
  File "/Users/matt/src/airflow/airflow/models/taskinstance.py", line 1201, in _run_raw_task
    self._run_mini_scheduler_on_child_tasks(session)
  File "/Users/matt/src/airflow/airflow/utils/session.py", line 67, in wrapper
    return func(*args, **kwargs)
  File "/Users/matt/src/airflow/airflow/models/taskinstance.py", line 1223, in _run_mini_scheduler_on_child_tasks
    partial_dag = self.task.dag.partial_subset(
  File "/Users/matt/src/airflow/airflow/models/dag.py", line 1490, in partial_subset
    dag.task_dict = {
  File "/Users/matt/src/airflow/airflow/models/dag.py", line 1491, in <dictcomp>
    t.task_id: copy.deepcopy(t, {id(t.dag): dag})  # type: ignore
  File "/usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/copy.py", line 153, in deepcopy
    y = copier(memo)
  File "/Users/matt/src/airflow/airflow/models/baseoperator.py", line 961, in __deepcopy__
    setattr(result, k, copy.deepcopy(v, memo))  # noqa
  File "/usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/copy.py", line 161, in deepcopy
    rv = reductor(4)
TypeError: cannot pickle 'module' object
ERROR - Task instance <TaskInstance: two_virtualenv.a 2021-05-11 00:00:00+00:00 [failed]> failed
```

**What you expected to happen**:

Both tasks say "hi" and succeed

**To Replicate**

The DAG and output above are shortened for brevity.  A more complete story: https://gist.github.com/MatrixManAtYrService/6b27378776470491eb20b60e01cfb675

Ran it like this:
```
 $ airflow dags test two_virtualenv $(date "+%Y-%m-%d")
```
airflow/models/dag.py
return query.first()
@functools.total_ordering
class DAG(LoggingMixin):
    """
    A dag (directed acyclic graph) is a collection of tasks with directional
    dependencies. A dag also has a schedule, a start date and an end date
    (optional). For each schedule, (say daily or hourly), the DAG needs to run
    each individual tasks as their dependencies are met. Certain tasks have
    the property of depending on their own past, meaning that they can't run
    until their previous schedule (and upstream tasks) are completed.
    DAGs essentially act as namespaces for tasks. A task_id can only be
    added once to a DAG.
    :param dag_id: The id of the DAG; must consist exclusively of alphanumeric
        characters, dashes, dots and underscores (all ASCII)
    :type dag_id: str
    :param description: The description for the DAG to e.g. be shown on the webserver
    :type description: str
    :param schedule_interval: Defines how often that DAG runs, this
        timedelta object gets added to your latest task instance's
        execution_date to figure out the next schedule
    :type schedule_interval: datetime.timedelta or
        dateutil.relativedelta.relativedelta or str that acts as a cron
        expression
    :param start_date: The timestamp from which the scheduler will
        attempt to backfill
    :type start_date: datetime.datetime
    :param end_date: A date beyond which your DAG won't run, leave to None
        for open ended scheduling
    :type end_date: datetime.datetime
    :param template_searchpath: This list of folders (non relative)