我有一个包,我想在我自己的Python脚本中自动安装和使用。
现在我有这个:
>>> # ... code for downloading and un-targzing
>>> from subprocess import call
>>> call(['python', 'setup.py', 'install'])
>>> from <package> import <name>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named <package>
然后我可以继续这样:
>>> exit()
$ python
>>> from <package> import <name>
它运作得很好。出于某种原因,如果我在运行setup.py
文件后重新启动,Python可以正常拿起包,但如果我不这样做则不行。如何在没有中间重启步骤的情况下使其工作?
(另外,使用subprocess.call()
在python脚本中运行setup.py
还有一个更好的选择吗?看起来愚蠢地从一个内部产生一个全新的Python解释器,但我不知道知道如何传递该安装参数。)
答案 0 :(得分:2)
根据您的Python版本,您需要查看imp
或importlib
。
e.g。对于Python 3,您可以这样做:
from importlib.machinery import SourceFileLoader
directory_name = # os.path to module
# where __init__.py is the module entry point
s = SourceFileloader(directory_name, __init__.py).load_module()
或者,如果您感到勇敢,您的Python路径知道该目录:
map(__import__, 'new_package_name')
答案 1 :(得分:0)
希望这会有所帮助,
我是从GitHub的seaborn下载的。
通过命令提示符,cd进入downloads \ seaborn文件夹
python install setup.py
然后使用anaconda的spyder,通过在控制台中运行以下命令来检查它是否已安装
import pip
sorted(["%s==%s" % (i.key, i.version)
for i in pip.get_installed_distributions()])
看到那里不存在,请转到工具并选择“更新模块名称列表”
再次在python控制台中尝试前面的代码,库仍然没有显示。
重新启动Spyder并尝试使用import seaborn
。
希望这会有所帮助。