【问题标题】:Python Import running in shell but not in filePython导入在shell中运行但不在文件中
【发布时间】:2017-03-28 17:40:34
【问题描述】:

我正在使用 Influxdb python 客户端向 Influxdb 写入数据。

但是,我无法在我的文件中导入 influxdb 模块。 它成功导入到 shell 中,但在文件中不起作用。

这里是

print '\n'.join( sys.path )

从我的外壳

/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/pymodules/python2.7

我的文件也是这样,

/home/azureuser/pranav/book/vogo-backend-v2/book
/home/azureuser/.virtualenvs/book/lib/python2.7
/home/azureuser/.virtualenvs/book/lib/python2.7/plat-x86_64-linux-gnu
/home/azureuser/.virtualenvs/book/lib/python2.7/lib-tk
/home/azureuser/.virtualenvs/book/lib/python2.7/lib-old
/home/azureuser/.virtualenvs/book/lib/python2.7/lib-dynload
/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/home/azureuser/.virtualenvs/book/local/lib/python2.7/site-packages
/home/azureuser/.virtualenvs/book/lib/python2.7/site-packages
/home/azureuser/pranav/book/vogo-backend-v2/book

这里是

sys.executable #from file
/home/azureuser/.virtualenvs/book/bin/python

sys.executable #from the shell
/usr/bin/python

如果我在不使用 sudo pip 的情况下安装它,则会引发异常,

  Exception:
  Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
  status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 283, in run
  requirement_set.install(install_options, global_options, root=options.root_path)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install
  requirement.install(install_options, global_options, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 672, in install
self.move_wheel_files(self.source_dir, root=root)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 902, in move_wheel_files
  pycompile=self.pycompile,
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 206, in move_wheel_files
  clobber(source, lib_dir, True)
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 193, in clobber
  os.makedirs(destsubdir)
  File "/usr/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
  OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/distpackages/influxdb-4.0.0.dist-info'

 Storing debug log for failure in /tmp/tmpokCmFo

请解释为什么会出现问题?还有解决办法。

【问题讨论】:

  • 你是在访问 virtualenv 之外的 shell 吗?
  • 好吧,您尝试导入的模块很可能位于您在使用 shell 时使用的路径之一中,但在您直接运行文件时却没有
  • 解决方案是什么@UnholySheep
  • @AbijithMg 访问shell,我的文件在同一个地方
  • 找出模块的位置,然后将其复制到路径(来自第二个输出)或在运行第二个版本时调整路径

标签: python system packages


【解决方案1】:
  1. 首先正确创建虚拟环境:

    virtualenv my_env
    
  2. 激活虚拟环境:

    source my_env/bin/activate
    
  3. 在您的 virtualenv 中使用 --no-cache-dir 标志再次安装客户端:

    pip install influxdb --no-cache-dir
    
  4. 尝试在您的 .py 文件中访问相同的内容。

这肯定会解决您的问题!

【讨论】:

  • 你是通过 sudo pip install 安装的吗?或者只是点安装?如果 sudo 它将安装在全局配置中,这又不会影响您的 virtualenv!
  • 使用 sudo,是否会造成问题?
  • 是的!正如我所说,该软件包将在全球范围内安装,并且您的文件将不会像在虚拟环境中那样被访问。按照我在答案中提到的做,它会解决你的问题。
  • 异常:回溯(最近一次调用最后一次):文件“/usr/lib/python2.7/dist-packages/pip/basecommand.py”,第 122 行,主要状态 = self.run (options, args) 文件“/usr/lib/python2.7/dist-packages/pip/commands/install.py”,第 283 行,运行中 require_set.install(install_options, global_options, root=options.root_path) 文件“ /usr/lib/python2.7/dist-packages/pip/req.py",第 1436 行,在安装要求中。安装(install_options,global_options,*args,**kwargs)
  • 然后抛出这个异常
猜你喜欢
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多