ImportError: cannot import name _remove_dead_weakref

dieter dieter at handshake.de
Mon May 7 01:44:26 EDT 2018


joseph pareti <joepareti54 at gmail.com> writes:
> thanks for the hint, virtualenv looks like an interesting option, however
> in my case I need to rely on several components that are already installed
> in the VM in Azure, including tensorflow, etc.
> If I use virtualenv, do I  need to start from scratch?

"virtualenv" has an option which makes the Python packages
installed in the "parent" Python installation available in
the created virtual environment. The "parent" Python installation
is determined by the Python you call "virtualenv" with.
Typically, it is a system Python installation. This way, you
can make your system Python modules and packages available
in your created virtual environment.


> In addition, I am not sure this will solve my problem: all I have seen is
> that the error code changes depending on the PYTHONPATH value. Perhaps it
> is a bug in the application code?

Likely, this alone will not solve your problem -- it might only help
you with a solution.

You have provided detailed error information only in your initial post.
Someone looked at those details and noticed that parts of a
Python 3 and of a Python 2 installation where involved -- which is
a very bad sign. You must ensure that only either Python 2 or Python 3
parts are used by your application - not a mix of both.

In a typical setup, Python 2 and Python 3 installations are well
separated -- not in your case, however. A set "PYTHONPATH"
can cause those installations to interfere with one another.

You reported that unsetting "PYTHONPATH" has changed the observed
behaviour. This indicates, that in your environment, "PYTHONPATH" is
set. A virtual environment is a tool to avoid the need to set
"PYTHONPATH" (which easily confuses setups with both Python 2 and
Python 3 installations).


>From what you describe, I conclude that in your case the "PYTHONPATH"
setting is important for your application.
For a quick fix, I would investigate for which Python version
this setting was designed for and then use this Python version for
your application.

However, as far as we know up to now, your environment has
both Python 2 and Python 3 installed -- and in such an environment,
a (quite) "global" "PYTHONPATH" setting can lead to surprises.
Using "virtualenv"s can avoid the use of "PYTHONPATH"
(another way would be to use a shell wrapper for the applications which sets
"PYTHONPATH" appropriately and then calls the application; then,
you would no longer need a "global" "PYTHONPATH").




More information about the Python-list mailing list