Python - 让pip仅在本地搜索额外的包

时间:2016-07-08 11:46:17

标签: python pip nsis python-wheel

我正在尝试构建一个NSIS distributable,它包含几个包。 其中一个是pyVISA-1.8,需要包enum34才能工作。

现在,我通常在nsis脚本中捆绑我需要的所有轮子,但是当我为pyVISA执行此操作时,(即告诉pip pip install enum34-1.X.X.whl然后pip install pyVisa-1.8.tar.gz我cant import visa没有失败(指向enum34)。(这实际上可能是一个错误)

我发现如果我让pip自己找到包,安装就可以了。 但是,这不是一个选项,因为此发行版应该能够在脱机系统上运行,因此我需要在nsis安装程序中包含所有源代码。

如何告诉pip本地缓存的enum34.whl位于何处?

此致

编辑:这是错误:

C:\Users\Administrator>pip list
ecdsa (0.13)
enum (0.4.6)
matplotlib (1.4.3)
numpy (1.9.2)
paramiko (1.15.2)
Pillow (3.1.0)
pip (7.1.2)
pycrypto (2.6.1)
pyparsing (2.0.7)
python-dateutil (2.4.2)
python-nmap (0.6.0)
pytz (2015.4)
requests (2.7.0)
setuptools (18.2)
six (1.10.0)

C:\Users\Administrator>pip install C:\python27\Dependencies\enum34-1.1.6-py2-non
e-any.whl
Processing c:\python27\dependencies\enum34-1.1.6-py2-none-any.whl
Installing collected packages: enum34
Successfully installed enum34-1.1.6

C:\Users\Administrator>pip install C:\python27\Dependencies\PyVISA-1.8.tar.gz
Processing c:\python27\dependencies\pyvisa-1.8.tar.gz
Requirement already satisfied (use --upgrade to upgrade): enum34 in c:\python27\
lib\site-packages (from PyVISA==1.8)
Installing collected packages: PyVISA
  Running setup.py install for PyVISA
Successfully installed PyVISA-1.8

C:\Users\Administrator>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import visa
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\Python27\lib\site-packages\visa.py", line 16, in <module>
    from pyvisa import logger, __version__, log_to_screen, constants
  File "c:\Python27\lib\site-packages\pyvisa\__init__.py", line 45, in <module>
    from .highlevel import ResourceManager
  File "c:\Python27\lib\site-packages\pyvisa\highlevel.py", line 22, in <module>

    from . import constants
  File "c:\Python27\lib\site-packages\pyvisa\constants.py", line 599, in <module
>
    class AccessModes(enum.IntEnum):
AttributeError: 'module' object has no attribute 'IntEnum'
>>>

1 个答案:

答案 0 :(得分:1)

问题是enum-0.4.6也已安装并且在路径中的enum34之前:(全新安装并安装了两个软件包:)

var workTitle = [];
workTitle[0] = "Work 1";
workTitle[1] = "Work 2";
workTitle[2] = "Work 3";

function workSelection(x)
{
      var loop = 0;
      while (loop < 3)
        {
          if (x == loop)
            {
                $("#workTitle").html(workTitle[loop]);
            }
          loop++;
        }
}

正如我们从以下陈述中可以看到的那样:

C:\Users\Administrator>python -c "import enum; print enum.__path__"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute '__path__' 

enum0.4.6是第一个要检查的路径,这会导致我们出现问题,因为我们需要enum34。我不知道他们的功能并不相互排斥。无论如何;卸载enum 0.4.6模块解决了我所有的问题,因为enum34被反向移植到python2.7并具有枚举0.4.6的所有功能,显然:

C:\Users\Administrator>python -c "import sys; print sys.path"
['', 'c:\\Python27\\lib\\site-packages\\enum-0.4.6-py2.7.egg', ..... ] 

现在我们可以检查模块的路径:

C:\Users\Administrator>pip uninstall enum
Uninstalling enum-0.4.6:
c:\python27\lib\site-packages\enum-0.4.6-py2.7.egg