如何在完整路径下加载Python模块?请注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项.
我的代码是:
import scriptlib.abc
import scriptlib.xyz
def foo():
... some operations
Run Code Online (Sandbox Code Playgroud)
但是scriptlib在其他目录中,所以我必须在环境变量"PYTHONPATH"中包含该目录.
无论如何,我可以在导入语句执行之前首先在环境变量"PYTHONPATH"中添加scriptlib目录,如:
import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz
def foo():
... some operations
Run Code Online (Sandbox Code Playgroud)
如果是,那么该值仅用于该命令提示符还是全局?
提前致谢
如何.py在Python 3.3+中导入任意python源文件(其文件名可以包含任何字符,并不总是以其结尾)?
我使用imp.load_module如下:
>>> import imp
>>> path = '/tmp/a-b.txt'
>>> with open(path, 'U') as f:
... mod = imp.load_module('a_b', f, path, ('.py', 'U', imp.PY_SOURCE))
...
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
Run Code Online (Sandbox Code Playgroud)
它仍然适用于Python 3.3,但根据imp.load_module文档,它已被弃用:
从版本3.3开始不推荐使用:不需要使用加载器来加载模块,并且不推荐使用find_module().
和imp模块文档建议使用importlib:
注意新程序应使用importlib而不是此模块.
在不使用已弃用的imp.load_module函数的情况下,在Python 3.3+中加载任意python源文件的正确方法是什么?
我正在尝试使用Windows 8,Anaconda和iPython 阅读shapefile,以便在本教程之后查看城市中的郊区.
我在命令提示符下尝试了"conda install shapefile"和"pip install shapefile",两者都返回"错误:找不到匹配的包:shapefile".
除此之外,我尝试按照这些链接手动添加它[1] 如何在给定完整路径的情况下导入模块? [2] 导入python模块不在路径上.但是我收到许可错误,这表明我无论如何都没有正确导入它们.
有关如何进行或最佳实践的任何建议表示赞赏.
我知道有是一吨的如何对导入Python模块不在路径,但我还没有遇到过使用Python的__init.py__ VS sys.path.insert.哪种方法更好?是否有任何明显的缺点,如性能?还有一个"Pythonic?"
我能想到的一个场景是,我有一个用户下载并放在任何目录中的程序,所以我不知道绝对路径(除非我以编程方式得到它).文件夹结构是
working dir
__init__.py
foo.py
src/
my_utils.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
我没有看到使用__init__.py或更改sys.path之间的任何区别.有没有什么方案你可以想到它会产生什么影响?
我的问题的第2部分是,为什么你必须做任何事情才能从子目录导入模块?我对Python很新,所以也许我不明白为什么摆弄路径或创建init文件是样板文件.对我来说,这似乎是一种不必要的复杂情况.如果我在当前工作目录中有"dir"并说"import dir.my_utils",我不明白为什么我要列出我希望能够在__init__.py中导入的所有内容.
如果这是重复的道歉,但我在发布之前进行了搜索.
编辑:这是另一个有用的链接:自动调用常见的初始化代码而不创建__init__.py文件
python ×5
anaconda ×1
coding-style ×1
gis ×1
ipython ×1
matplotlib ×1
path ×1
python-2.7 ×1
python-3.3 ×1
python-3.x ×1
pythonpath ×1