我无法在Visual Studio代码中安装“Linter pylint”。我使用Python 3.9

2024-10-04 09:17:57 发布

您现在位置:Python中文网/ 问答频道 /正文

救命啊

我无法在Visual Studio代码中安装“Linter pylint”。我使用Python3.9和Windows10

Python安装在C:\Program Files\Python39中

当我启动Ide时,它告诉我“没有安装Linter pyling。来源:Python(扩展)[安装/选择Linter/不再显示]”

当我选择“安装”时,它会查找缓存文件,并向我抛出以下错误消息:

SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xf6 in position 0: invalid start byte 
(sitecustomize.py, line 21)
WARNING: The wheel package is not available.
Error in sitecustomize; set PYTHONVERBOSE for traceback:
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xf6 in position 0: invalid start byte 
(sitecustomize.py, line 21)
 
ERROR: Command errored out with exit status 1: 'C:\Program Files\Python39\python.exe' 
'C:\Users\XXX\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py' 
prepare_metadata_for_build_wheel 

我在代码中将我的真名改为XXX,因为它显示了我的全名和姓氏

然而,pylint在我的笔记本电脑和VisualStudio代码上运行正常。我已经检查了其他几个主题,也在谷歌上搜索了这个问题。然而,我无法解决这个问题

这是路径的问题吗

我还尝试通过CMD安装pylint,并关闭了visualstudio代码。我收到以下错误消息:

 ERROR: Command errored out with exit status 1:
     command: 'c:\program files\python39\python.exe' 'C:\Users\XXXX\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\XXX~1\AppData\Local\Temp\tmprs1z79cr'
         cwd: C:\Users\XXXX\AppData\Local\Temp\pip-install-50w37pyv\lazy-object-proxy_19a2f4b71f224fe7bc87991bc2a8cf52
    Complete output (15 lines):
    Error in sitecustomize; set PYTHONVERBOSE for traceback:
    SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xf6 in position 0: invalid start byte (sitecustomize.py, line 21)
    WARNING: The wheel package is not available.
    Error in sitecustomize; set PYTHONVERBOSE for traceback:
    SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xf6 in position 0: invalid start byte (sitecustomize.py, line 21)
    running dist_info
    creating C:\Users\XXXX\AppData\Local\Temp\pip-modern-metadata-inoke7l2\lazy_object_proxy.egg-info
    writing C:\Users\XXXX\AppData\Local\Temp\pip-modern-metadata-inoke7l2\lazy_object_proxy.egg-info\PKG-INFO
    writing dependency_links to C:\Users\XXXX\AppData\Local\Temp\pip-modern-metadata-inoke7l2\lazy_object_proxy.egg-info\dependency_links.txt
    writing top-level names to C:\Users\XXXX\AppData\Local\Temp\pip-modern-metadata-inoke7l2\lazy_object_proxy.egg-info\top_level.txt
    writing manifest file 'C:\Users\XXXX\AppData\Local\Temp\pip-modern-metadata-inoke7l2\lazy_object_proxy.egg-info\SOURCES.txt'
    reading manifest file 'C:\Users\XXXX\AppData\Local\Temp\pip-modern-metadata-inoke7l2\lazy_object_proxy.egg-info\SOURCES.txt'
    writing manifest file 'C:\Users\XXXX\AppData\Local\Temp\pip-modern-metadata-inoke7l2\lazy_object_proxy.egg-info\SOURCES.txt'
    creating 'C:\Users\XXXX\AppData\Local\Temp\pip-modern-metadata-inoke7l2\lazy_object_proxy.dist-info'
    error: invalid command 'bdist_wheel'
    ----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\program files\python39\python.exe' 'C:\Users\XXXX\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\XXXX~1\AppData\Local\Temp\tmprs1z79cr' Check the logs for full command output.

谢谢大家!


Tags: pipininfoobjectlocalbyteusersappdata
1条回答
网友
1楼 · 发布于 2024-10-04 09:17:57

检查一下你的例子,下面是一些注释

1)与你的技能变量相关
在Java中,按照惯例,局部变量、实例变量和类变量都是用小写字母写成的

阅读维基百科上的Java naming conventions文章
另请参见第9章关于Code Conventions for the Java™ Programming Language中的命名约定

所以这会更好:

List<UserDetails> skills = new ArrayList<UserDetails>();

2)同样与你的技能变量有关
您将其命名为skills,尽管从代码中可以清楚地看出skills只是UserDetails对象的属性之一。我在做一个假设,但是UserDetails课程只是关于用户技能的吗?如果,那么最好在类名中以某种方式反映这一点,例如用户技能。 否则,如果技能只是用户详细信息中的一个,那么这样做会更好:

List<UserDetails> userDetailsList = new ArrayList<UserDetails>();

同样,强烈建议使用有意义的变量名。阅读上面的命名约定

3)调用Connection.prepareStatement()方法时,不需要强制转换为PreparedStatement,因为它已经返回PreparedStatement对象。所以只要做:

pstmt = conn.prepareStatement(strSQL); 

作为对你的问题的回答,,当然你可以使用JSTL中的<c:forLoop>,例如来遍历所有用户的列表,并输出每个用户的相关细节。这是一种常见的做法

你的问题不太清楚,但让我猜猜
在您的示例中,您只有有限的技能列表,我的意思是只有PHP、Java、MySQL、JavaScript、jQuery和Node。对于每个用户,如果用户具有相应的技能,则希望选中相关复选框

如果上述假设是正确的,那么这里是一个可能的解决方案


设置一个属性,该属性包含数组或所需技能的列表

考虑到列表仅限于预定义的值,您可以将该列表存储在ServletContext中,以便整个应用程序都可以使用它。最好在实现ServletContextListener的类中设置这样的全局对象

示例:AppContextListener。java

package com.example.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class AppContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        String[] skills = {"PHP", "Java", "MySQL", "JavaScript", "jQuery", "Node.js"};
        event.getServletContext().setAttribute("skills", skills);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {

    }
} 

NB为了接收这些通知事件(contextInitialized、contextDestroyed),必须在web应用程序的部署描述符中声明实现类,使用WebListener进行注释,或者通过ServletContext上定义的addListener方法之一进行注册。这里我使用了@WebListener注释

我没有时间深入讨论架构细节,但对于这个例子,我假设有一个类User,它包含与用户相关的信息。其中包括作为Map<String, Boolean>实现的属性技能。它有getter和setter(比如public Map<String, Boolean> getSkills()public void setSkills(Map<String, Boolean> skills)

示例:用户。java

package com.example.model;

import java.util.Date;
import java.util.Map;

public class User {

    private String fisrtName;
    private String lastName;
    private Date birthday;
    ...
    private Map<Sting, Boolean> skills;

    // getters and setters here
}


在某个地方,在处理通过doPost()方法中的某个HTML表单提交的数据的servlet中,填充了用户技能和其他细节。类似于以下内容(简化示例):

User user = new User();
// set the user related data like first name or something like that
...
// get the list of available skills from ServletContext
String[] skills = (String[]) getServletContext().getAttribute("skills");
Map<String, Boolean> userSkills = new HashMap<String, Boolean>();

// Set the appropriate skills
for (String skill: skills) {
    if (request.getParameter(skill) != null) {
        userSkills.put(skill, true);
    } else {
        userSkills.put(skill, false);
    }
}

...
// Set user skills
user.setSkills(userSkills);
...

这样你就不用硬编码技能的名字,否则你可以这样做:

...
Map<String, Boolean> userSkills = new HashMap<String, Boolean>();
if (request.getParameter("PHP") != null) {
    userSkills.put("PHP", true);
} else {
    userSkills.put("PHP", false);
}
// the same way for Java, MySQL and others
...


现在在一些servlet中,获取所有用户,例如,一个List<User> users,在请求范围中设置一个属性,比如request.setAttribute("users", users)来存储用户列表,并转发到某个视图(JSP页面),该视图将输出与所有用户相关的数据

输出用户相关数据的JSP页面的简单示例:用户。jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>Test Page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <%  We iterate thru all the users  %>
    <c:forEach items="${users}" var="user">
        <!  Outputting different user related data  >
        ...
        <!  Now outputting the user skills  >
        <h3>User skills</h3>
        <%  In the inside loop, we iterate thru all the available skills, stored in the ServletContext  %>
        <c:forEach items="${skills}" var="skill">
            <c:choose>
                <%  If the user has the appropriate skill, the related checkbox will be checked. Otherwise unchecked.  %>
                <%  Note: using skill as a key in the map of user skills  %>
                <c:when test="${user.skills[skill] == true}">
                    <input type="checkbox" name="chkSkills" value="${skill}" checked="checked">${skill}&nbsp;
                </c:when>
                <c:otherwise>
                    <input type="checkbox" name="chkSkills" value="${skill}">${skill}&nbsp;
                </c:otherwise>
            </c:choose>
        </c:forEach>
    </c:forEach>
</body>
</html>

或者使用<c:if>标记:用户,使用更紧凑的变体。jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>Test Page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <c:forEach items="${users}" var="user">
        ...
        <h3>User skills</h3>
        <c:forEach items="${skills}" var="skill">
            <%  Note: here <c:if> tag is used right inside <input> tag  %>
            <input type="checkbox" name="chkSkills" value="${skill}" <c:if test="${user.skills[skill]}">checked="checked"</c:if>>${skill}&nbsp;
        </c:forEach>
    </c:forEach>
</body>
</html>

注意
注释内部特定于JSP的代码部分JSP,最好以
<% Some comment %>的形式使用JSP注释。与HTML注释(以<! Some comment >的形式)不同,JSP注释在发送给客户端的结果页面中不可见


希望这将帮助你,并提供一些有用的想法

相关问题 更多 >