Search code examples
pythonpipnsispython-wheel

Python - Let pip only search locally for extra packages


Im trying to build an NSIS distributable, and this contains several packages. One of them is pyVISA-1.8 which needs the package enum34 to work.

Now, I usually bundle all the wheels I need for the packages in the nsis script, but when I do this for pyVISA , (i.e tell pip to pip install enum34-1.X.X.whl then pip install pyVisa-1.8.tar.gz I cant import visa without failures (pointing to enum34). (This might actually be a bug)

I found out that if i let let pip find the package on its own, the install works. This is not an option, however, because this distro should be able to be run on offline systems, so I need to have all the source code in the nsis installer.

How do I tell pip where the locally cached enum34.whl is located?

Regards

EDIT: Here is the error:

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'
>>>

Solution

  • The problem was that enum-0.4.6 was also installed and preceded enum34 in the path : (omn a brand new install with both packages installed:)

    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__' 
    

    As we can see from the following statement:

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

    enum0.4.6 is the first path to be checked, which causes us problems, since we wanted enum34. I did not know their functionalities were not mutually exclusive. Anyway; uninstalling the enum 0.4.6 module solves all my problems, because enum34 is backported to python2.7 and has all the functionality of enum 0.4.6, apparently:

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

    Now we can check the path of the module:

    C:\Users\Administrator>python -c "import enum; print enum.__path__"
    ['c:\\Python27\\lib\\site-packages\\enum']