Jython 不会导入用户定义的类;导入错误:没有名为 ****** 的模块

2023-11-26

这几天我一直在用头撞墙,试图解决这个问题。我已经开始使用 Jython 进行快速原型设计。我遇到了一个看似非常基本的问题,但我似乎无法克服它。

我是在JythonBook 的第 10 章当我尝试编写和使用“Beach”类时遇到了问题(从标记为“清单10-1”的部分开始)。我可以很好地导入和使用 java.lang.Math,但无法让“Beach”类为我的生活工作。我编写了 Beach 类,将其变成 jar 并更改了权限,

jar cf Beach.jar Beach.java chmod 777 海滩.jar

并确保 Beach.jar 和 Beach.java 都在当前工作目录中,以及 /Library/Java/Extensions/ (我在 Mac 上)——没有骰子。

我只是想不出可能是什么问题。我希望这里有人能看到我错过的东西。

为了您的方便,我认为可能有用的所有内容都来自“实时”Jython 会话:

$ jython
Jython 2.5.2 (Release_2_5_2:7206, Mar 2 2011, 23:12:06) 
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_24
Type "help", "copyright", "credits" or "license" for more information.
>>> ## First try importing "Math" from Java:
>>> from java.lang import Math
>>> Math.max(4, 7)
7L
>>> ## Try System from Java:                
>>> javasystem.out.println("Hello")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'javasystem' is not defined
>>> from java.lang import System as javasystem
>>> javasystem.out.println("Hello")
Hello
>>> ##
>>> ## Now try to import my own class, written as in the JythonBook 
>>> ## This is where the trouble starts:
>>> ## First check that I am in the correct place, look at the system path:
>>> import os
>>> os.system("pwd")
/Users/me/EclipseProjects/JythonTutorial/JavaClasses
0
>>> os.system("ls -la")
total 16
drwxr-xr-x  4 me  staff  136 Oct 19 11:25 .
drwxr-xr-x  7 me  staff  238 Oct 19 02:16 ..
-rwxrwxrwx  1 me  staff  567 Oct 19 11:25 Beach.jar
-rwxrwxrwx  1 me  staff  256 Oct 19 11:14 Beach.java
0
>>> ## Let's look at the guts of Beach.java quickly:
>>> os.system("cat Beach.java")
public class Beach {
    private String name;

    public Beach(String name, String city){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

0
>>> ## Let's also look at the system path:
>>> import sys
>>> sys.path
['', '/Users/me/jython2.5.2/Lib', '__classpath__', '__pyclasspath__/', '/Users/me/jython2.5.2/Lib/site-packages']
>>> ## I presume that the '' should indicate that I can use this.                               
>>> ## To be careful, I also cp Beach.jar to /Library/Java/Extensions/ 
>>> os.system("ls -la /Library/Java/Extensions/Beach.jar")
-rwxr-xr-x  1 me  admin  567 Oct 19 11:27 /Library/Java/Extensions/Beach.jar
0
>>> ##
>>> ## Now actually attempt to load Beach:
>>> import Beach
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named Beach
>>> from Beach import Beach
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named Beach
>>> 

我还应该发布我的 ~/.bash_profile 吗?

我在互联网和 StackOverflow 上闲逛了很多。这个帖子给了我尝试“目标导入”的想法,但正如你所看到的,这不起作用。我似乎无法让它发挥作用。在阅读了一些有关扰乱 CLASSPATH 的恐惧之后,我不再理会它。

也许我应该指出,我对编程并不陌生——我是一名计算机科学本科生,并且在过去 6 年左右的时间里一直在编写代码(主要是科学计算)。我对 Java 还很陌生;我今年早些时候刚刚开始使用 Java 编程。这看起来非常简单,NetBeans 已经解决了我不知道的所有问题。

我担心我误解了 Java 的类路径。我还将一些 jar 移动到了我认为应该由 Java “搜索”的位置 - /System/Library/Java/Extensions/、/Library/Java/Extensions/ 和 /usr/lib/java/ (我知道......),但似乎没有什么可以改变上述错误。

(可能相关的说明是,在尝试过此操作后,Netbeans 似乎无法填充新项目 - 我现在正在手动执行此操作。不确定这是否是有用的信息。)

有什么想法吗?我非常感谢任何帮助!

EDIT:尝试下面的评论后,我得到以下结果:

$ jython
Jython 2.5.2 (Release_2_5_2:7206, Mar 2 2011, 23:12:06) 
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_24
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys                                                                             
>>> sys.path.append("/Users/me/EclipseProjects/JythonTutorial/JavaClasses/Beach.jar")
>>> from com.stackoverflow.beach import Beach                                              
*sys-package-mgr*: processing modified jar, '/Users/me/EclipseProjects/JythonTutorial/JavaClasses/Beach.jar'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named stackoverflow
>>> ## Look in Beach.java
>>> import os
>>> os.system("cat Beach.java")
// Beach.java
package com.stackoverflow.beach;
public class Beach {
    private String name;
    public Beach(String name, String city){
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
>>>

我知道Java包是基于文件结构的。如果这里有明显错误的地方,请告诉我。与此同时,是时候去了解 Java 包的工作原理了(而不是让 Netbeans 总是管理它)。


jython 无法导入 *.java 文件,您需要将其编译为 *.class。

生成文件:

.PHONY: test_beach

test_beach: test_beach.py beach.jar
    jython -J-classpath beach.jar $<

beach.jar: Beach.class
    jar -cf $@ $<

%.class: %.java
    javac $<

Example

$ make -k 
javac Beach.java
jar -cf beach.jar Beach.class
jython test_beach.py
*sys-package-mgr*: processing modified jar, '/path/to/beach.jar'
Cocoa Beach

其他文件

测试海滩.py:

#!/usr/bin/env jython
import Beach

beach = Beach("Cocoa Beach","Cocoa Beach")
print beach.getName()

海滩.java:

//NOTE: if you declare `package a.b;` here then you should put it in a/b directory
public class Beach {

    private String name;
    private String city;


    public Beach(String name, String city){
        this.name = name;
        this.city = city;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jython 不会导入用户定义的类;导入错误:没有名为 ****** 的模块 的相关文章

  • java.lang.NoClassDefFoundError:无法初始化类 sun.nio.ch.FileChannelImpl

    我正在开发一个执行的应用程序Jython 2 5 3脚本来自JAVA 1 6 027 该脚本只是使用编解码器库打开一个文件 如下所示 try from codecs import open as codecs open except Imp
  • 布尔恒等 == True 与 is True

    这是使用的标准约定if foo is None而不是if foo None测试一个值是否是特定的None 如果你想确定一个值是否精确True 不仅仅是一个类似真实的值 有什么理由使用if foo True而不是if foo is True
  • Jython 不会导入用户定义的类;导入错误:没有名为 ****** 的模块

    这几天我一直在用头撞墙 试图解决这个问题 我已经开始使用 Jython 进行快速原型设计 我遇到了一个看似非常基本的问题 但我似乎无法克服它 我是在JythonBook 的第 10 章当我尝试编写和使用 Beach 类时遇到了问题 从标记为
  • 从python中的类列表中随机选择x个项目

    在 jython 中 我有一类定义如下的对象 class Item def init self pid aisle bay hits qtyPerOrder self pid pid self aisle int aisle self ba
  • 为 jython 脚本创建可执行文件

    对于我正在使用的 python 脚本py2exe创建可执行文件 有什么办法可以创建 exe or jarjython 脚本文件 分享我是如何实现这一目标的 感谢 EnigmaCurry 提供框架 Jython wiki 中的 Jar 方法效
  • 理解如何使用 Jython 时遇到的问题

    我刚刚开始学习 Jython 在实施方面遇到了一些问题 我已经浏览了 Jython 2 5 附带的演示文件 但我仍然不确定如何实现 Jython 来获得我想要的东西 目前 我已经将 Java 代码作为进程执行 Python 服务器 Pyth
  • 使用 jython 获取环境(windows 或 unix)

    如何确定环境是windows还是unix 我想执行类似的代码 如下所示 请建议 import os if os getenv windows os system cmd c if os getenv unix os system sh sh
  • Sikulix/Jython UAC 自动化

    我想知道是否有人有幸在安装程序自动化期间通过 UAC 弹出窗口实现自动化 我有一个现有的自动安装程序代码 但由于 Sikuli 在此步骤中未使用键盘 鼠标 它在 UAC 区域失败 有人在这里有运气吗 或者在 Jython 中没有办法做到这一
  • 为什么有时Python子进程在运行进程后无法获得正确的退出代码?

    我正在使用 Python 子进程在 Windows 7 上运行外部脚本 我正在尝试获取退出代码 在情况 1 中 我运行一个 python 脚本test1 py test1 py import sys sys exit 24 lt exit
  • 从 Eclipse 打包和部署 Jython 程序

    因此 我一直致力于编写一些 Jython 代码 我一直在使用最新版本的 Eclipse IDE 和 PyDev 插件进行开发 到目前为止 情况还算可以忍受 我已经让所有 Python 脚本正常工作 并且成功地将几个 JAR 文件和另一个 J
  • 如何让 PyDev 编辑器有选择地忽略错误?

    我在 Eclipse 下使用 PyDev 编写一些 Jython 代码 我有很多情况需要做这样的事情 import com work project component client Interface ISubInterface as I
  • Jython easy_install 错误

    我的目的是向 jython 添加一些 python 库 即 suds 包 为此 请尝试遵循以下指示http www jython org jythonbook en 1 0 appendixA html setuptools http ww
  • 在 jython 中实例化 webclient 对象给出奇怪的结果

    我正在尝试在 jython 脚本中使用 java 的 WebClient jar 我正在运行 jython 脚本 如下所示 jython Dpython path home tipu Dropbox dev proj lib test py
  • 动态语言 - 我应该选择哪一种?

    动态语言正在兴起 而且数量很多 例如Ruby Groovy Jython Scala 静态 但具有动态语言的外观和感觉 等 我的背景是 Java SE 和 EE 编程 我想将我的知识扩展到这些动态语言之一 以便为未来做好更好的准备 但我应该
  • 在 Jython 中使用多处理 2.6.2.1 包

    我是 Jython Python 世界的新手 我正在尝试在 Jython 中安装多处理包 但是我收到了来自 easy install 的以下返回消息 Setup script exited with error Compiling exte
  • 使用 gmail 在 R 中通过电子邮件发送附件

    我希望使用 gmail 在 R 中发送一封带有附件的电子邮件 我发现 sendmailR 不能与 gmail 一起使用 因为它需要身份验证 我无法让它与 gmail 一起使用 所以我认为这是真的 除非有人告诉我我错了 在这种情况下我将发布
  • 通过 IPython 使用 Jython:readline 仍然是一个问题吗?

    我想将 Jython 解释器与 IPython 一起使用 这样我就可以使用制表符补全之类的东西 也许还可以使用 IPython 笔记本 这IPython 常见问题解答网站 http ipython org faq html围绕这是否可行采取
  • 我可以在不安装 Python 的情况下为 RobotFramework 安装 Selenium2Library 吗?

    如果我只有 Jython 我可以使用 Selenium2Library 吗 也就是说 我还没有安装Python 并且希望摆脱不需要它的麻烦 我读过相互矛盾的信息 但是 jybot 不能使用 selenium2library 我需要 pybo
  • 自动化脚本:如果 FieldA = 1,则将 FieldB 设置为“one”

    我试图将这个问题分解为可管理的部分 空间查询 https stackoverflow com questions 56587515 maximo spatial query 我认为第一步是创建一个自动化脚本这样做是这样的 从字段中获取值 用
  • Sikuli 积分器 C#

    我想在 C 中使用 Sikuli Integrator 我以管理员身份运行 VS 通过 NuGet 管理器安装 Sikuli Integrator 并想在简单任务上测试他 这是我的代码 using SikuliModule using Sy

随机推荐

  • 批处理脚本如何执行相当于“cat << eof”的操作?

    在Linux Bash 中有一个非常有用的功能将文字转储到另一个文件 如下所示 cat gt see txt lt lt EOF contents going into my file EOF 我需要的是 Windows 批处理脚本的等效项
  • SSD mobilenet模型无法检测较远距离的物体

    我已经使用自定义数据集 电池 训练了 SSD Mobilenet 模型 下面给出了电池的示例图像 并附上了我用来训练模型的配置文件 当物体靠近相机时 使用网络摄像头测试 它以超过的概率准确地检测到物体0 95但是当我将物体移动到更远的距离时
  • jQuery .css() 函数不返回预期值

    好吧 我已经搜索了 jQuery 文档 需要有人专门维护 我已经搜索了 SO 并且我已经搜索了 Google 我找不到这个问题的答案 In Words 过去 我记得 jQuery 是这样工作的 myObj width 返回计算出的宽度 my
  • Apache Cordova:无法加载资源:服务器响应状态为 404(未找到)

    当我在 Android 模拟器或 Android 设备上运行应用程序时 我在所有 AJAX 请求上收到以下错误 Failed to load resource the server responded with a status of 40
  • 在 C# 中解析字符串中“坏”单词的最佳方法是什么?

    我在想这样的事情 foreach var word in paragraph split if badWordArray Contains word do something about it 但我确信有更好的方法 提前致谢 UPDATE我
  • 防止重写和/或隐藏基类函数 (C++ 11)

    自从学习 C 以来 我有一段时间甚至想阻止基类非虚函数的隐藏 我不确定这是否符合道德 但 C 11 功能给了我一个想法 假设我有以下内容 基地 h ifndef baseexample h define baseexample h incl
  • 使用可变参数和泛型时出现 ClassCastException

    我正在使用 java 泛型和可变参数 如果我使用下面的代码 我会得到一个ClassCastException 即使我根本不使用强制转换 更奇怪的是 如果我在 Android dalvik 上运行这个 异常中不会包含堆栈跟踪 如果我将接口更改
  • 检查s3存储桶中是否存在文件夹

    如何使用 Ruby on Rails 检查我的 s3 存储桶中是否存在某个文件夹 我正在使用 AWS S3 官方 gem 初始化全局连接后 AWS S3 Base establish connection access key id gt
  • 替换 MYSQL 中的非 ASCII 字符

    要将非 ASCII 字符转换为 ASCII 我使用了以下查询 UPDATE tablename SET columnToCheck CONVERT columnToCheck USING ASCII WHERE columnToCheck
  • 芹菜异常处理

    假设我有这个任务定义 def some other foo input raise Exception This is not handled return input app task bind True max retries 5 so
  • 专门化静态 constexpr 数据成员

    我有一个类来描述某种类型的一些特征 template
  • Hammer JS 无法与主干一起工作

    我正在尝试让 Hammer JS 事件与主干一起工作 但无法让它响应事件 我已经尝试过以下方法 http cijug ne t tech 2013 01 16 backbone hammer https gist github com kj
  • 如何调整 Google AdWords 跟踪像素以在 AngularJS 应用程序中使用?

    如何调整 AdWords 跟踪像素以使其在 AngularJS 应用程序中按预期运行 典型的跟踪代码如下所示
  • 更改 UIBarButtonItem 的宽度[重复]

    这个问题在这里已经有答案了 我怎样才能改变宽度UIBarButtonItem到 29 像素 属性宽度不起作用 我不想创建一个UIButton并使用initWithCustomView因为我希望方形背景适应导航栏颜色 我正在使用initWit
  • 如何将 graphql-type-json 包与 GraphQl 一起使用

    我无法让 GraphQL 识别 JSON 标量类型 我遵循了 apollo 文档 http dev apollodata com tools graphql tools scalars html Using a package 为我的架构定
  • 有哪些类型的宏/语法扩展/编译器插件?

    我对 Rust 生态系统中用于几个类似宏的事物的许多术语感到非常困惑 有人可以澄清有哪些宏 语法扩展 编译器插件并解释这些术语之间的关系吗 你说得对 它is令人困惑 特别是 因为大多数这些功能都不稳定并且经常变化 但我会尝试总结一下目前的情
  • 全屏视频切换 HTML

    HTML 5 中的视频标签确实令人着迷 我需要知道是否可以让用户切换全屏播放 我不想使用任何其他视频插件 我只需要使用视频标签 那么这可能吗 请帮帮我 您可以使用以下代码创建一个按钮 使视频进入全屏模式 JavaScript 代码
  • GC.SuppressFinalize 是否有保证?

    我在实践中的观察是GC SuppressFinalize并不总是抑制对终结器的调用 尽管如此 终结器仍可能被调用 因此我想知道是否GC SuppressFinalize具有以下性质request而不是一个保证通过系统 更多信息 如果需要 以
  • 如果间接调用sied方法则不会调用Sinon Spy

    Problem 在我们的代码库中 我们遇到了 sinon 的问题 可以使用下面的代码片段来重现该问题 问题是 这似乎是间接的所谓间谍还击力量false the console log明确指出该方法被调用 但spy called遗迹false
  • Jython 不会导入用户定义的类;导入错误:没有名为 ****** 的模块

    这几天我一直在用头撞墙 试图解决这个问题 我已经开始使用 Jython 进行快速原型设计 我遇到了一个看似非常基本的问题 但我似乎无法克服它 我是在JythonBook 的第 10 章当我尝试编写和使用 Beach 类时遇到了问题 从标记为