On a Windows PC, I would like to be able to store modules in topic-specific foldersinstead of in Python26/Lib/site-packages, and then import into an IPython session those modules and the functions in them.
To test this, I have made a toy module: --- """ toy_module.py This is for testing the importing of modules from folders other than "Lib". The first statement below is from Langtangen, Primer, p.143. At allows running the module as a program, as well as importing it as a module. """ if __name__ == '__main__' : def double_it (a) : b = 2.*a print 'double_it in toy_module: a = ', a, ', b = ', b return b def triple_it (a) : b = 3.*a print 'triple_it in toy_module: a = ', a, ', b = ', b return b --- I have tried many ways of importing this module and its functions, but all of them have failed. In the IPython session below, the failures have been flagged for easy identification by "<<<". --- Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] Type "copyright", "credits" or "license" for more information. IPython 0.10.1 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object'. ?object also works, ?? prints more. In [1]: # Test importing from other than Lib. In [2]: # 2011-01-05 In [3]: function_dir = 'G:\\Python_2010-12\\JH_Python_Functions' In [4]: # That is for the PC at work. In [5]: import os In [6]: os.getcwd() Out[6]: 'C:\\Documents and Settings\\Hornstein' In [7]: os.chdir(function_dir) In [8]: os.getcwd() Out[8]: 'G:\\Python_2010-12\\JH_Python_Functions' In [9]: import toy_module In [10]: result1 = toy_module.double_it(3.) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) G:\Python_2010-12\JH_Python_Functions\<ipython console> in <module>() AttributeError: 'module' object has no attribute 'double_it' <<< 1 In [11]: from toy_module import double_it as twox --------------------------------------------------------------------------- ImportError Traceback (most recent call last) G:\Python_2010-12\JH_Python_Functions\<ipython console> in <module>() ImportError: cannot import name double_it <<< 2 In [12]: IsFileThere = os.isfile('toy_module.py') --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) G:\Python_2010-12\JH_Python_Functions\<ipython console> in <module>() AttributeError: 'module' object has no attribute 'isfile' In [13]: IsFileThere = os.path.isfile('toy_module.py') In [14]: IsFileThere Out[14]: True In [15]: filelist = os.listdir(function_dir) In [16]: filelist Out[16]: ['arc_to_-pitopi.py', 'arc_to_0to2pi.py', 'ClustersOfGalaxiesUtils.py', 'ClustersOfGalaxiesUtils.py.txt', 'ClustersOfGalaxiesUtils.Test.2010-08-04.1.txt', 'CosmolFns.py.txt', 'CosmolGeom_SmoothedMatter_CL.py.txt', 'Distances_z.py.txt', 'extract_text_line.py', 'JH.PythonExperimentsOnWindows.2011-01-03.txt', 'LAMBDA_calc.py', 'loop_to_sum.example.py', 'number_theory.py', 'omega_plasma_radHz.py', 'README.txt', 'Sampletxt.IPython.txt', 'Sampletxt.txt', 'script2_1.py', 'synchRadn.py.txt', 'toy_module.py', 'toy_module.pyc', 'uv2D.Feb14-06.py', 'VariablesInFile.py', 'VariablesInFile.pyc', 'VLA_beamwidths.py', 'z_cosmol.py'] In [17]: import glob In [18]: pyfilelist = glob.glob('*.py') In [19]: pyfilelist Out[19]: ['arc_to_-pitopi.py', 'arc_to_0to2pi.py', 'ClustersOfGalaxiesUtils.py', 'extract_text_line.py', 'LAMBDA_calc.py', 'loop_to_sum.example.py', 'number_theory.py', 'omega_plasma_radHz.py', 'script2_1.py', 'toy_module.py', 'uv2D.Feb14-06.py', 'VariablesInFile.py', 'VLA_beamwidths.py', 'z_cosmol.py'] In [20]: # Try changing the Python search path. In [21]: import sys In [22]: sys.path Out[22]: ['', 'C:\\Python26\\scripts', 'C:\\WINDOWS\\system32\\python26.zip', 'C:\\Python26\\DLLs', 'C:\\Python26\\lib', 'C:\\Python26\\lib\\plat-win', 'C:\\Python26\\lib\\lib-tk', 'C:\\Python26', 'C:\\Python26\\lib\\site-packages', 'C:\\Python26\\lib\\site-packages\\IPython/Extensions', u'C:\\Documents and Settings\\Hornstein\\_ipython'] In [23]: sys.path.append(function_dir) In [24]: sys.path Out[24]: ['', 'C:\\Python26\\scripts', 'C:\\WINDOWS\\system32\\python26.zip', 'C:\\Python26\\DLLs', 'C:\\Python26\\lib', 'C:\\Python26\\lib\\plat-win', 'C:\\Python26\\lib\\lib-tk', 'C:\\Python26', 'C:\\Python26\\lib\\site-packages', 'C:\\Python26\\lib\\site-packages\\IPython/Extensions', u'C:\\Documents and Settings\\Hornstein\\_ipython', 'G:\\Python_2010-12\\JH_Python_Functions'] In [25]: import toy_module In [26]: result1 = toy_module.double_it(3.) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) G:\Python_2010-12\JH_Python_Functions\<ipython console> in <module>() AttributeError: 'module' object has no attribute 'double_it' <<< 3 In [27]: exit() Do you really want to exit ([y]/n)? Any insight would be appreciated. Also, it is unfortunate that no warning is issued when an attempt at importing fails. John Hornstein (By the way, I am stuck with Python2.6 because the binary installer for NumPy on Windows still refuses to accept any later version of Python.)
-- http://mail.python.org/mailman/listinfo/python-list