enrm enrm - 4 months ago 45
Python Question

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

Answer

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