python - 从具有相同文件名的 venv 文件夹导入

标签 python virtualenv

我在 python 中使用带有 virtualenv 的 redis 库。

我有一个名为 redis.py 的文件,其中包含以下导入;

import redis

class RedisExtension(Extension):
    def __init__(self, config):
        print redis

class Redis(Facade):
    pass

但是,即使激活了 venv 文件夹,它似乎也执行 self 导入。 我需要使 redis.py 从 venv 文件夹中导入 redis,该文件夹具有通过 pip 安装的 redis 库 无需更改此处的任何名称

有什么办法吗?

最佳答案

顺便说一句,您的要求并不常见,我在这里展示的是一些 hack。如果能更好 你设法将你的 python 脚本/模块重命名为更合理的名称。

默认情况下,Python 设置从多个不同路径导入,其中一个是当前路径。

>>> import os
>>> os.sys.path
['',
 '/home/javl/Envs/so/bin',
 '/home/javl/Envs/so/lib/python2.7',
 '/home/javl/Envs/so/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/javl/Envs/so/lib/python2.7/lib-tk',
 '/home/javl/Envs/so/lib/python2.7/lib-old',
 '/home/javl/Envs/so/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/javl/Envs/so/local/lib/python2.7/site-packages',
 '/home/javl/Envs/so/lib/python2.7/site-packages',
 '/home/javl/Envs/so/local/lib/python2.7/site-packages/IPython/extensions',
 '/home/javl/.ipython']

如您所见,第一项是“”。这意味着“这个目录”。删除它:

>>> os.sys.path.remove("")
>>> os.sys.path
['/home/javl/Envs/so/bin',
 '/home/javl/Envs/so/lib/python2.7',
 '/home/javl/Envs/so/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/javl/Envs/so/lib/python2.7/lib-tk',
 '/home/javl/Envs/so/lib/python2.7/lib-old',
 '/home/javl/Envs/so/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/javl/Envs/so/local/lib/python2.7/site-packages',
 '/home/javl/Envs/so/lib/python2.7/site-packages',
 '/home/javl/Envs/so/local/lib/python2.7/site-packages/IPython/extensions',
 '/home/javl/.ipython']
>>> import redis

如果我们想把事情恢复原状,我们可以这样做:

>>> os.sys.path.insert(0, "")

您应将此修改放入您的redis.py

os.sys.path.remove("")
import redis
os.sys.path.insert(0, "")

class RedisExtension(Extension):
    def __init__(self, config):
        print redis

class Redis(Facade):
    pass

关于python - 从具有相同文件名的 venv 文件夹导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944781/

相关文章:

python - Pandas 数据框合并/链接值

python - Pytest 结果 JUnit 风格的 xml 文件测试用例计数

python - which 和 type 在 vi​​rtualenv 中显示 IPython 可执行文件的不同路径,在 IPython 中导入失败,在标准解释器中导入成功?

python - Vim : "YouCompleteMe unavailable: This package should not be accessible on Python 3" 错误

python - 如果我在 python 中有 10 个虚拟环境,是否会下载相同的库 10 次?

python - 为什么某些 Flask session 值在关闭浏览器窗口后从 session 中消失,但稍后又重新出现而无需我添加它们?

python - 如何使用 boto3 创建 ec2 实例

python - TensorFlow Estimator 1.3 无法获取 predict_proba?

python - 有条件地让 pip 根据平台选择不同的版本

python - 如何使用 virtualenv 在 OpenShift DIY 上设置 Django 应用程序