分类 我爱编程 下的文章

python pip 安装包后提示找不到的问题的解决

pip很方便使用起来

今天刚用,但是遇到了安装后import的时候提示找不到的问题

首先造成这种问题有可能是这个原因:

你用python2.6安装的pip,

后来升级了Python到2.7或者3.x

pip的安装还是默认装到python2.6的site package里面去

解决办法,就是下载pip的source code,解压后进入文件夹

运行

python setup.py build

python setup.py install

pip的配置就换成了你现在运行的python版本


或者是这种可能


python能找的到的包都在/usr/local/lib下面

看了一下pip的log,显然它的默认是把包装在/usr/lib下面


查了一下,说可以通过配置文件来改

在$HOME/.pip这个文件夹下面找pip.conf

找不到啊

那就自己建立一个

在里面添上

[install]
install-option=--prefix=/usr/local

ignore-installed = true

这三行,第三行是强制安装的,因为之前安装在了/usr/lib下面,再次安装会报已经安装而退出。

还有个帖子说得是可以配置一个国内的pip服务器,我试了一下,什么都找不到,就没用


再次执行安装命令,发现已经安装在了/usr/local/lib/python2.7/site-packages文件夹下面了!

import

OK!

.pip这个文件夹需要在窗口中的edit ->preference->view 打开 show hidden file什么的那个选项才能看到,当然也可以直接通过终端来编辑

 (转):http://blog.csdn.net/u012955491/article/details/19782539

linux下virtualenv的python版本

virtualenv是python开发中一个重要的工具,它可以帮助我们创建一个干净的python解释环境,创建虚拟环境时,这个虚拟环境的
python版本往往是系统默认的2.x版本.别急,我们只需要一条简单的命令就可以创建一个python3.x的虚拟环境

virtualenv -p /usr/bin/python3 py3env

注意,前提是你已经安装了python3.x版本

当我们想用python2.x版本的时候,直接

virtualenv -p /usr/bin/python venv

或者

virtualenv venv

都是可以的.


使用nginx反向代理绕过备案

近期工信部大动作,干了一批未备案的站点,博主包括本站在内,线上所有未备案的站点都被干掉了,全部提示需要备案。

但是因为博主不知为何就是非常的抗拒备案一事,所以想到使用nginx反向代理绕过备案,google一番后发现已有前人实现,说明是可行的。


先来说说我最开始的绕过备案想法:

1、使用https访问绕过备案,http强制跳转https。(优点:直接访问https速度快  缺点:无法强制http跳转)

2、使用nginx反向代理(优点:支持http及https访问  缺点:访问速度较慢,需要使用跳板vps)


经过测试,直接访问https是可以成功绕过备案的,但是却无法实现http强制跳转https,所以方案1并不友好。

最后选择了使用方案2

方案2的简单nginx配置如下:

跳板vps:

server
    {
        listen 80;
        server_name markss.club;
            return 301 https://$host$request_uri;
    }
server
    {
        listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name markss.club ;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/markss.club;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/markss.club/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/markss.club/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
    location / {
            proxy_pass            http://119.29.240.194:8088;
            proxy_redirect          off;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            }
        location ~ /.well-known {
            allow all;
        }
        access_log off;
    }


站点vps:

server
    {
        listen 8088;
        #listen [::]:80;
        server_name localhost;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/markss.club/public;
        include other.conf;
        #error_page   404   /404.html;
        include enable-php.conf;
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }
        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }
         location / {
             try_files $uri $uri/ /index.php$is_args$args;
             }
        access_log  /home/wwwlogs/markss.club.log;
    }



如果不需要使用https访问的话跳板的nginx配置如下:

server
    {
        listen        80;
        server_name     markss.club;
        location / {
            proxy_pass            http://119.29.240.194:8088;;
            proxy_redirect          off;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            }
    }

简简单单的几行代码便能绕过备案,缺点就是增加了访问速度的消耗,需要使用一台vps作为跳板访问。

configure: error: Cannot find php-config. Please use --with-php-config=PATH 错误的解决方案

configure: error: Cannot find PHP-config. Please use --with-PHP-config=PATH

一般出现这个错误说明你执行 ./configure 时  --with-php-config 这个参数配置路径错误导致的。

修改为:

./configure --with-php-config=/usr/local/php/bin/php-config

就可以解决问题

上面的 /usr/local/php/ 是你的 php 安装路径 ,路径完整填写是  php-config的路径 


查看安装路径的命令:


whereis php


which php :这个是查看正在运行的


微信浏览器返回上一页时强制刷新问题

在微信浏览器中,使用返回上一个页面

history.back()

或者使用物理返回都会造成微信浏览器强制刷新,相当于了reload页面。当我们的页面存在ajax请求渲染的数据时,这样就会造成非常不好的体验,用户在list列表点击某个item查看详情,每次返回时页面都会重新loading刷新。


解决方案:

主要通过

sessionStorag

实现解决。

1、在list页面刷新获取到的数据存进sessionStorag

2、判断是否从详情页返回,详情页设置refresh为true

sessionStorage.setItem("refresh", true);

3、list页面判断sessionStorag中是否同时存在listData和refresh,若存在则使用listData数据渲染页面,若不存在则刷新页面

4、点击list页面某个item时需要保存当前页码及当前滚动条位置到sessionStorag


page主要用于返回的缓存数据后定位当前页码,top定位浏览器滚动条当前位置



页面大致代码如下,使用了JS模板引擎及dropload刷新插件

JS模板:

<script type="text/html" id="tdTemplate">
    <% if(list.length>0){ %>
        <% for (var i = 0, leni = list.length; i < leni; i++) { %>
            <a href="<?php echo $this->createUrl('user/MessageDetail',array('id'=>''))?><%=list[i].id %>" class="msg-item-wrap unread">
                <img src="../../../../../public/kouzi/wechat/img/msg-icon.png" class="msg-item-icon">
                <div class="msg-item">
                    <div><%=list[i].title %></div>
                    <div class="msg-item-cont"><%=list[i].text %></div>
                </div>
                <div class="msg-item-date"><%=list[i].create %></div>
                <% if(list[i].read == 1){ %>
                    <div class="msg-item-tips"></div>
                <% } %>
            </a>
        <% } %>
    <% } %>
</script>


JS代码:

<script>
    $(function () {
        var pageSize = 10;
        var page = 0;
        var aList = '';
        var aParam = {};
        var autoLoad = true; //用于判断是否自动加载
        var refresh = sessionStorage.getItem('refresh'); //判断是否刷新(变量来自于详情页)
        var listData = '';
        backList();
        /**
         * 记录滚动条位置及页码
         **/
        $(document).on('click','.msg-item-wrap',function (e) {
            e.preventDefault();
            aParam = {
                page: page,  //当前页码
                top: $('.page-content').scrollTop()
            };
            aParam = JSON.stringify(aParam);
            sessionStorage.setItem('aParam', aParam);
            window.location.href = $(this).attr('href');
        });
        /**
         * 上拉刷新加载
         **/
        $('.page-content').dropload({
            scrollArea : $('.page-content'),
            autoLoad:autoLoad,
            domDown : {
                domClass   : 'dropload-down',
                domRefresh : '<div class="dropload-refresh">↑上拉加载更多</div>',
                domLoad    : '<div class="dropload-load"><span class="loading"></span>加载中...</div>',
                domNoData  : '<div class="dropload-noData">暂无更多消息</div>'
            },
            loadDownFn : function(me){
                $.ajax({
                    type: 'post',
                    url: '<?php echo $this->createUrl('user/ajaxMessageList')?>',
                    data:{
                        'page': page,
                        'pageSize': pageSize
                    },
                    success: function(result){
                        page = page+pageSize;
                        var items='';
                        if(result.data.list.length > 0){
                            items = template.render("tdTemplate", {list: result.data.list});
                            aList +=refresh ? listData+items : items;
                            sessionStorage.setItem('aList', aList);
                            sessionStorage.setItem('nomore', false);
                        }
                        if(result.data.list.length < pageSize || !result.data.list){
                            sessionStorage.setItem('nomore', true);
                            me.lock();
                            // 无数据
                            me.noData();
                        }
                        // 为了测试,延迟1秒加载
                        setTimeout(function(){
                            $('.msg-center-wrap').append(items);
                            // 每次数据加载完,必须重置
                            me.resetload();
                        },1000);
                    },
                    error: function(xhr, type){
                        // 即使加载出错,也得重置
                        me.resetload();
                    }
                });
            }
        });
        /**
         * 返回列表页时,取存储的sessionStorage数据,有,则取数据渲染页面,并滑到预期位置
         * 删除sessionStorage存储的历史数据
         */
        function backList() {
            listData = sessionStorage.getItem('aList');
            var param = JSON.parse(sessionStorage.getItem('aParam'));
            var nomore = JSON.parse(sessionStorage.getItem('nomore'));
            // listData用于保存列表数据
            // 页面加载时判断sessionStorage是否存有列表数据,有则赋值给listData,否则,listData取同步加载的第一页数据
//            window.listData = aList ? aList : pageConfig.listData;
            autoLoad = listData&&refresh ? false : true;
            if (listData != null && refresh) {
                // 加载列表
                $('.msg-center-wrap').html(listData);
                // 滚动到对应位置,并清除sessionStorage
                $('.page-content').scrollTop(param.top);
                page = param.page;
                //没有更多数据的时候延时加载样式
                if(nomore){
                    setTimeout(function () {
                        $('.dropload-refresh').addClass('dropload-noData').removeClass('dropload-refresh').text('暂无更多消息');
                    },100);
                }
                if(!refresh){
                    sessionStorage.removeItem('aList');
                    sessionStorage.removeItem('aParam');
                }
                sessionStorage.removeItem('refresh');
            }
        }
    })
</script>