我如何确保所有模块都从 Virtualenv 中的同一位置导入

How Do I Ensure That All Modules Are Imported From Same Location Within Virtualenv

我是基于 运行 python 的软件,它需要一个 virtualenv,其中安装了各种额外的 python 包。以下是安装说明:

Clone the repository to a shared filesysem on a cluster

    >git clone https://github.com/jgurtowski/nanocorr
    >cd nanocorr        

    Create a virtual environment to install python dependencies

    >virtualenv nanocorr_ve
    >source nanocorr_ve/bin/activate

    install the following packages using pip:

        pip install git+https://github.com/cython/cython
        pip install numpy
        pip install h5py
        pip install git+https://github.com/jgurtowski/pbcore_python
        pip install git+https://github.com/jgurtowski/pbdagcon_python
        pip install git+https://github.com/jgurtowski/jbio
        pip install git+https://github.com/jgurtowski/jptools

    #Finally install the nanocorr package itself

    > python setup.py install

我毫无问题地做到了这一点。但是,虽然 运行 该软件,但我发现它失败并出现以下回溯。

(nanocorr_ve)[nanocorr_test]$ correctOxford
Traceback (most recent call last):
  File    "/local/workdir/malonge/nanocorr_test/nanocorr/nanocorr_ve/bin/correctOxford",     line 9, in <module>
    load_entry_point('jptools==0.1', 'console_scripts', 'correctOxford')()
  File     "/local/workdir/malonge/nanocorr_test/nanocorr/nanocorr_ve/lib/python2.7/site-    packages/pkg_resources/__init__.py", line 558, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File     "/local/workdir/malonge/nanocorr_test/nanocorr/nanocorr_ve/lib/python2.7/site-    packages/pkg_resources/__init__.py", line 2682, in load_entry_point
    return ep.load()
  File     "/local/workdir/malonge/nanocorr_test/nanocorr/nanocorr_ve/lib/python2.7/site-    packages/pkg_resources/__init__.py", line 2355, in load
    return self.resolve()
  File     "/local/workdir/malonge/nanocorr_test/nanocorr/nanocorr_ve/lib/python2.7/site-    packages/pkg_resources/__init__.py", line 2361, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File     "/local/workdir/malonge/nanocorr_test/nanocorr/nanocorr_ve/lib/python2.7/site-    packages/jptools/correct.py", line 21, in <module>
    from pbtools.pbdagcon.q_sense import output_dag_info
  File     "/local/workdir/malonge/nanocorr_test/nanocorr/nanocorr_ve/lib/python2.7/site-    packages/pbtools/pbdagcon/q_sense.py", line 50, in <module>
    from pbcore.io import FastaReader
  File "/programs/python/lib/python2.7/site-packages/pbcore-1.0.0-    py2.7.egg/pbcore/io/__init__.py", line 31, in <module>
    from .BasH5IO import *
  File "/programs/python/lib/python2.7/site-packages/pbcore-1.0.0-    py2.7.egg/pbcore/io/BasH5IO.py", line 37, in <module>
    import h5py, numpy as np, os.path as op
  File "/programs/python/lib/python2.7/site-packages/h5py-2.5.0-py2.7-linux-    x86_64.egg/h5py/__init__.py", line 13, in <module>
    from . import _errors
 ImportError: /programs/python/lib/python2.7/site-packages/h5py-2.5.0-py2.7-linux-x86_64.egg/h5py/_errors.so: undefined symbol: PyUnicodeUCS2_DecodeUTF8

我找到了关于 specific error itself 的详细信息,但我认为问题的根源在于回溯清楚地显示了从 /local virtualenv 站点包导入模块到另一个站点的转换 - /programs 中的包目录。

我的问题如下:鉴于我在两个不同的地方安装了相同的 python 包,一个在系统范围的位置,一个在 virtualenv 中,我如何确保其他程序正确导入所有来自同一 virtualenv sit-packages 目录中的模块。我以为这会自动完成。我不是 100% 确定这是错误的唯一原因,但能够解决这个问题将有助于我进一步调试。

这取决于您如何设置环境。 virtualenv 有一个标志选项,强制它不使用系统站点包

virtualenv --no-site-packages my_env

这是最新版本 (>=1.7) 的默认行为。

如果您定义了 PYTHONPATH 环境变量,那也会影响您的 virtualenv 环境。