以非root身份安装Python的Module或者Package以及pip安装指定路径

因为要远程访问公司的服务器,没有sudo的权限,所以在安装python的一些包的时候就不能安去默认路径了(比如以/usr/local/lib/为prefix的路径)。

一般来讲用easy_install或者pip来安装的时候都默认在PATHONPATH的site-packages下面,比如/usr/lib64/python2.7/site-packages。

  1. 用pip
    pip install --user package_name

  2. 用easy_install
    easy_install --prefix=$HOME/local package_name

    这样就会安装到$HOME/local/lib/pythonX.Y/site-packages中去。

    别忘了这个路径一定要加到环境变量PYTHONPATH中,不然之后import模块的时候是找不到它的。

  3. pip指定路径:

    sudo pip install six --upgrade --target="/usr/lib/python2.7/dist-packages"

    我在安装tensorflow时发现sys.path会先找/usr/lib/python2.7/dist-packages,但是pip默认安装在/usr/local/...下面,所以指定target是必要的,否则可能即使upgrade了在python执行时找的库依然时没升级的。



作者:麦兜胖胖次
链接:http://www.jianshu.com/p/92a109ddf695
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
### 解决 Python `ModuleNotFoundError` `'not a package'` 错误 当遇到类似于 "ModuleNotFoundError: No module named ‘email.utils’; ‘email’ is not a package" 或者其他类似的包未找到错误时,通常是因为 Python 无法识别指定路径中的模块作为有效的软件包[^1]。 #### 原因分析 此类问题可能由多种因素引起: - **文件结构不正确**:如果项目内的文件夹缺少必要的初始化文件 (`__init__.py`),则该文件夹不会被当作一个可导入的包处理。 - **相对路径或绝对路径使用不当**:在尝试跨不同子目录访问模块时,如果没有正确设置工作目录或是采用相对而绝对路径来引用目标模块,则可能导致此异常发生。 - **环境变量配置失误**:PYTHONPATH 等环境变量未能包含所需库的位置也可能引发这个问题。 #### 解决策略 为了有效解决问题并防止未来再次出现相同情况,建议采取如下措施: ##### 修改文件结构 确保每一个应该成为独立包的文件夹内都存在名为 `__init__.py` 的空文件。这使得这些文件夹能够作为一个完整的 Python 包被加载和执行[^3]。 ```plaintext project_root/ ├── main.py └── mypackage/ ├── __init__.py └── util.py ``` ##### 使用正确的导入语句 对于位于同一级别的模块之间相互调用的情况,推荐使用显式的相对导入方式(即带有前缀点`.`),这样可以更清晰地表达依赖关系,并减少潜在冲突的风险。 ```python from .subpackage import some_function # 显式相对导入 ``` 另外,在顶层脚本中可以直接通过包名来进行绝对形式的引入操作。 ```python import mypackage.util as util_module # 绝对导入 ``` ##### 调整当前的工作目录 确认启动应用程序所在的根位置是否与预期一致,因为这对于解析基于项目的内部资源至关重要。可以通过命令行参数或其他手段调整默认工作区至合适的地方。 ##### 安装缺失的第三方库 有时所报告丢失的是外部依赖项而不是本地自定义组件。此时应当核查 pip freeze 输出列表里是否有遗漏安装的关键扩展件,并利用 pip install 补全它们。 ```bash pip install email-validator # 示例:假设需要额外安装验证器工具 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值